作者:mobiledu2502938577 | 来源:互联网 | 2013-07-18 13:56
今天说一个大家都遇到的问题,关于字符串截取的。主要说一下中文、英文混写的字符串怎么截取!
首先,全英文以及和数字混合的字符串,我们都知道这个函数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]/"