<?php

////////////////////////////////////////////////////////////////////
// PHP截取中英文及标点符号混合的字符串函数(绝对不会出现乱码)
// 本程序在utf-8、gb2312中测试通过。使用者自行测试big5。
// 函数 left( 源字符串, 截取指定的字符串个数, 编码(可省略,默认为utf-8) )
//////////////////////////////////////////////////////////////////// function left($str, $len, $charset="utf-8")
{
//如果截取长度小于等于0,则返回空
if( !is_numeric($len) or $len <= 0 )
{
return "";
} //如果截取长度大于总字符串长度,则直接返回当前字符串
$sLen = strlen($str);
if( $len >= $sLen )
{
return $str;
} //判断使用什么编码,默认为utf-8
if ( strtolower($charset) == "utf-8" )
{
$len_step = 3; //如果是utf-8编码,则中文字符长度为3
}else{
$len_step = 2; //如果是gb2312或big5编码,则中文字符长度为2
} //执行截取操作
$len_i = 0;
//初始化计数当前已截取的字符串个数,此值为字符串的个数值(非字节数)
$substr_len = 0; //初始化应该要截取的总字节数 for( $i=0; $i < $sLen; $i++ )
{
if ( $len_i >= $len ) break; //总截取$len个字符串后,停止循环
//判断,如果是中文字符串,则当前总字节数加上相应编码的中文字符长度
if( ord(substr($str,$i,1)) > 0xa0 )
{
$i += $len_step - 1;
$substr_len += $len_step;
}else{ //否则,为英文字符,加1个字节
$substr_len ++;
}
$len_i ++;
}
$result_str = substr($str,0,$substr_len );
return $result_str;
} ////////////////////////////////////////////////////////////////////
// 调用示例
////////////////////////////////////////////////////////////////////
$str = "空格 也算一个字符";
echo "截取后的字符串:".left($str,14); ?>
  
  

PHP截取中英文混合字符的更多相关文章

  1. CSS截取中英文混合字符串长度

    <!doctype html> <html> <head> <meta http-equiv="content-type" content ...

  2. 用JS来实现于截取中英文混合字符串方法(转载)

    网站制作过程中,提示层文字超出,需要JS做字符串截取,但是呢,我们常常会烦恼文字中英文混合如何判断,因为我们知道在JS中 string.length这个值是不考虑中英文的,但是计算机对中英文的识别是  ...

  3. C#截取中英文混合字符串分行显示

    private int GetStrByteLength(string str) { return System.Text.Encoding.Default.GetByteCount(str); } ...

  4. Java 截取中英文混合字符串

    题目: 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串. 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入&q ...

  5. C# 截取中英文混合字符串分行显示宽度相同

    /// <summary>        /// 截取方法名显示宽度        /// </summary>        /// <param name=" ...

  6. php统计中英文混合的文章字数

    function ccStrLen($str) #计算中英文混合字符串的长度 { $ccLen=0; $ascLen=strlen($str); $ind=0; $hasCC=ereg("[ ...

  7. ThinkPHP+Smarty模板中截取包含中英文混合的字符串乱码的解决方案

    好几天没写博客了,其实有好多需要总结的,因为最近一直在忙着做项目,但是困惑了几天的Smarty模板中截取包含中英文混合的字符串乱码的问题,终于解决了,所以记录下来,需要的朋友看一下: 出现乱码的原因: ...

  8. Lua截取utf-8编码的中英文混合字符串

    参考博客:UTF8字符串在lua的截取和字数统计[转载] 需求 按字面个数来截取子字符串 函数(字符串, 开始位置, 截取长度) utf8sub(,) = 好1世界哈 utf8sub(,) = 你好1 ...

  9. PHP获取中英文混合字符串长度及截取

    1.字符串长度 PHP获取中英文混合字符串长度的实现代码如下,1中文=1位,2英文=1位,可自行修改 /** * PHP获取字符串中英文混合长度 * @param $str string 字符串 *  ...

随机推荐

  1. layDate 日期与时间组件 入门

    首先第一步 在官方下载layDate文件.layUI官网:http://layer.layui.com/    https://www.layui.com/laydate/ layDate文件的下载步 ...

  2. fastscript增加三方控件

    fastscript增加三方控件 A.关于如何使用第三方控件,增加方法.属性.事件)举例如下: 如:有一控件为edtbutton:TedtButton,我们需要在动态脚本中使用该控件.我们采用如下方法 ...

  3. Android 获取设备唯一标识码

    概述 有时需要对用户设备进行标识,所以希望能够得到一个稳定可靠并且唯一的识别码.虽然Android系统中提供了这样设备识别码,但是由于Android系统版本.厂商定制系统中的Bug等限制,稳定性和唯一 ...

  4. 记录一下:关于mysql数据误删除恢复的问题

    大概看来几篇博客: 1.delete的可以通过回滚(rollback)的方式恢复;但是前提是,你的数据表引擎是InnoDB而不是MyISAM,而且操作不是自动提交的 但是这种方式不可以恢复trunca ...

  5. 非常easy的JAVA反射教程

    原创文章,转载请注明. 反射能够动态载入类,实例化对象,调用方法.如今以下面样例解说. 一.载入类. Class clazz = Class.forName("java.lang.Strin ...

  6. C语言-多重背包问题

    多重背包问题 问题:有N种物品和一个容量为V的背包.第i种物品最多有n[i]件可用,每件费用是c[i],价值是w[i].求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大. 分 ...

  7. viewState详解

    作者:Infinities Loop 概述 ViewState是一个被误解很深的动物了.我希望通过此文章来澄清人们对 ViewState的一些错误认识.为了达到这个目的,我决定从头到尾详细的描述一下整 ...

  8. android中的MD5、Base64、DES/3DES/ADES加解密

    MD5摘要算法: <span style="font-size:18px;">主要代码: String s = edit.getText().toString(); i ...

  9. 数据结构基础之memset---有memset 抛出的int 和 char 之间的转换和字节对齐

    今天晚上,在做滤波算法时,里面用到很多float 和int 以及char 之间的类型强制转换,后面滤波完发现图片有些区域块,有过度曝光的白光,我就跟踪,以为是char 字符数字数据溢出问题,加了0-2 ...

  10. 例题6-16 单词 UVa10129

    1.题目描写叙述:点击打开链接 2.解题思路:本题利用欧拉回路存在条件解决. 能够将全部的单词看做边,26个字母看做端点,那么本题事实上就是问是否存在一条路径,能够到达全部出现过的字符端点. 因为本题 ...