php专区

 首页 > php专区 > PHP基础 > 字符串 > 包含中文的字符串截取问题

包含中文的字符串截取问题

分享到:
【字体:

今天说一个大家都遇到的问题,关于字符串截取的。主要说一下中文、英文混写的字符串怎么截取!

首先,全英文以及和数字混合的字符串,我们都知道这个函数substr($string,int stsrt,int length),带有三个参数:$string是我们要截取的字符串,int start表示开始截取的位置,最后一个表示截取的长度。在这种情况下,用这个函数截取是OK的。

下面,就是中英混写的一类,搞不好就出现乱码的,令人头疼。之前在网上也看了许多自定义的函数,代码比较多,看起来很复杂,其实PHP自带的有一个扩展函数mb_substr(),用这个函数截取是不会出现乱码的。

用这个函数,必须注意开启mbstring扩展,在PHP配置文件中找到extension=php_mbstring.dll,把前面的分号去掉就是了。一般带有四个参数:

mb_substr($string,int start,int length,encoding),前三个和substr()的一样,最好一个参数是说明编码的,如果是ANSI类型的文件就是gbk了,utf-8就是utf-8。

例如:echo mb_substr('我是1个beautiful人','1','5','gbk');结果就是“是1个be”,注意:编码要对应,这时候一个汉字和一个字符都代表一个长度,位置从零开始。

如果非要弄自定义函数的话,可以参考smarty里面的一个函数,在/plugins目录下面,有个字符串截取的函数文件modifier.truncate.php,我们可以参考这个写,然后判断编码的形式,把对应的字母或者汉字以存储格式作为匹配条件重新放入一个数组中去,每一个元素对应一个字母或者一个汉字,这样就不会乱码了,然后用array_slice()函数把截取的字符串取出来,下面贴上代码:

UTF- 8的编码格式:"/[x01-x7f]|[xc2-xdf][x80-xbf]|xe0[xa0-xbf][x80-xbf]| [xe1-xef][x80-xbf][x80-xbf]|xf0[x90-xbf][x80-xbf][x80-xbf]|[xf1-xf7][x80-xbf][x80-xbf][x80-xbf]/"

GBK的编码格式:"/[x01-x7f]|[xa1-xff][xa1-xff]/"

分享到:
php实现中文字符串截取无乱码的方法
 首页要知道的: 1、中文字符在gbk编码下占2个字节,在utf-8编码下占3个字节 2、ord() 函数返回字符串第一个字符的 ASCII 值 3、中文字符的ASCII值是大于0xa0。 关键的点是判断要截取的字符串是中文字符还是英文字符,用ord(substr($str,$start,1))>0xa0可判断,大于则是中文,否则是英文。实现代码如下...
PHP浮点数显示和转成字符串
  你可能会觉得PHP中将浮点数(float)转成字符串非常简单, 但是, 常用的方法隐藏着严重的bug. 因为, PHP在处理浮点数时有非常不合理的做法, 会有精度丢失. 经研究, 其实是PHP在显示浮点数时的问题, 也可以说是BUG. PHP内置的echo, var_dump, json_encode, 字符串拼接等函数(指令)在显示浮点数时都有问题, 导致精度丢失. ...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……