PHP substr() 函数能够 分割文字,但要分割的文字若是包括中文字符每每会遇到问题,这时能够用mb_substr()/mb_strcut这个函 数,mb_substr() /mb_strcut的用法与substr()类似,只是在mb_substr()/mb_strcut最后要加入多一个 参数,以设定字符串的编码,可是 通常的服务器都没打开php_mbstring.dll,须要在php.ini在把php_mbstring.dll 打开。
举个例子:
<?php
echo mb_substr('这样一来个人字符串就不会有乱码^_^', 0, 7, 'utf-8');
?>
输出:这样一来个人字
<?php
echo mb_strcut('这样一来个人字符串就不会有乱码^_^', 0, 7, 'utf-8');
?>
输出:这样一
从上面的例子能够看出,mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,可是都不会产生半个字符的现象……php
mbstring 函数的说明:web
php的mbstring扩展模块提供了多字节字符的处理能力,日常最经常使用的就是用mbstring来切分多字节的中文字符,这样能够避免出现半个字符的状况,因为是php的扩展,它的性能也要比一些自定义的多字节切分函数要好上一些。服务器
mbstring extension提供了几个功能相似的函数,mb_substr和mb_strcut,看看手册上对它们的解释。函数
mb_substr
mb_substr() returns the portion of str specified by the start and length parameters.性能
mb_substr() performs multi-byte safe substr() operation based on number of characters. Position is counted from the beginning of str. First character's position is 0. Second character position is 1, and so on.ui
mb_strcut
mb_strcut() returns the portion of str specified by the start and length parameters.编码
mb_strcut() performs equivalent operation as mb_substr() with different method. If start position is multi-byte character's second byte or larger, it starts from first byte of multi-byte character.orm
It subtracts string from str that is shorter than length AND character that is not part of multi-byte string or not being middle of shift sequence.utf-8
再举个例子,有一段文字, 分别用mb_substr和mb_strcut来作切分:ci
PLAIN TEXT
CODE:
<?php
$str = '我是一串比较长的中文-www.webjx.com';
echo "mb_substr:" . mb_substr($str, 0, 6, 'utf-8');
echo "<br>";
echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8');
?>
输出结果以下:
mb_substr:我是一串比较//按字符来截取,一个英文字母、一个汉字都是一个字符
mb_strcut:我是//按字节数截取,一个汉字是3个字节数
note:在使用smarty模板时 可能会用到truncate这个调节器来截取字符串,此时当们截取的字符串中有中文时就会出现乱码现象(在变长编码下,一般都是以字符个数而不是以字节个数来衡量字符串的长度的),这时咱们能够本身定义一个变量调节器按照字符数量来截取字符串。方法:1.在php中ord()函数得到字符的ascii码 2.根据ascii码用substr()函数来截取字符串这样有中文也不会出现乱码了。