而substr的长度参数是根据字节去算的,在GB2312编码时,一个中文占2个字节,英文为1个字节;而在UTF-8编码当中,一个中文能够占领2个或3个字节,英文或半角标点占1字节。(引荐进修:PHP编程从入门到通晓)
直接运用PHP函数substr截取中笔墨符能够会涌现乱码,主假如substr能够硬生生的将一个中笔墨符“锯”成两半。解决办法:
1、运用mbstring扩大库的mb_substr截取就不会涌现乱码了。
2、本身誊写截取函数,但效力不如用mbstring扩大库来得高。
3、假如仅是为了输出截取的串,可用以下体式格局完成:substr($str, 0, 30).chr(0)。
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截取字符串无乱码要领的细致内容,更多请关注ki4网别的相干文章!