在我们学习PHP知识的过程中,PHP截取字符串应该是一个非常常见的字符串基础操作了,想必大家都比较熟悉这方面知识点。
但是有些新手朋友们可能遇到过,当待截取的字符串出现中英文混合时,计算字符串的长度,会出现不准确和截取出现乱码的情况,其实这个也是非常容易解决的。
首先,要了解关于中英文占多少字节的问题。
ASCII码:一个中文汉字占两个字节的空间。
UTF-8编码:一个中文(含繁体)等于三个字节。
Unicode编码:一个中文(含繁体)等于两个字节。
其次,如果是需要计算字符串的长度,需要明确是“字符”的长度还是“字节”的长度。
例如,是不是中英文数字符号等1个都算1个,还是按实际占用的字节计算。
这个需要看具体的使用场景,需要存储导数据时,需要按字节计算实际的长度,和数据库字段的长度匹配。需要前端显示时,可能需要按字符计算。
第三,实际处理用到的两个函数mb_substr()
和mb_strlen()
mb_substr($str,$start,$len,$encoding)
,用于中文字符串的截取,在相应的编码页面输入相应的$encoding
mb_strlen($str,$encodding)
,用于获取中文字符串的长度,包含多字节的字符算成一个。
GBK编码截取示例
$str = '我是谁'; //gbk编码的字符串
echo mb_substr($str, 0, 1, 'gbk'); //输出 我
utf-8编码截取示例
$str = '我abc是谁'; //utf-8编码的字符串
echo mb_substr($str, 0, 2, 'utf-8'); //输出 我a
中英混合也完全没有问题。
【但是,一定要住编码需要明确指定,否则可能还是会出现乱码】
第四,关于mb_strcut
按字节来切分字符串,截取中文都不会产生半个字符的现象
substr
、mb_substr
、mb_strcut
这三个函数都用来截取字符串,所不同的是:
substr
是最简单的截取,无法适应中文;
mb_substr
是按字来切分字符串,
而mb_strcut
是按字节来切分字符串,截取中文都不会产生半个字符的现象。
这三个函数的前三个参数完全一致,即:
第一个参数是操作对象
第二个参数是截取的起始位置
第三个参数是截取的数量
mb_substr
和mb_strcut
还有第四个参数:第四个参数可以根据不同的字符集进行设置。
友情提示
使用的时候要注意php文件的编码,和网页显示时的编码。
使用这两个mb_substr
和 mb_strcut
方法要事先知道字符串的编码,如果不知道编码,就需要判,mbstring库还提供了mb_check_encoding
来检验字符串编码,但还不完善。
mb_check_encoding($str,$encoding)
;成功是返回true,失败时返回false;
php中文字符串的截取 其中ord($str)>127(因为中文字符的acsii码的范围是128(即0x80-0xfe)-254)