语法:substr(string,start,length)
说明:substr(字符串,开始坐标,长度)
$str = '米虫先生真是个大帅比';
echo substr($str,0,12);
//输出结果为“米虫先生”
上面案例中明明输入了12位但实际只出现4个字?
中文UTF-8编码,每个汉字占3字节(一般情况下服务器都会习惯采用UTF编码)。
当然如果GB2312编码模式先,中文占2字节。
而英文则占1字节,基本上大部分编码模式下皆是如此。
从上面结果里看,如果我指定长度为3的倍数一般不会有问题?
如果你的文本确认全是中文一般不会出现乱码问题,但如果字符串中包含英文、数字或者半角符号...
那在长度结尾处,substr()函数很有可能硬生生地将一个中文字符“锯”成两半,因此就产生了乱码问题。
语法:substr(string,start,length,codetype)
说明:substr(字符串,开始坐标,长度,编码方式)
$str = '米虫先生真是个大帅比';
echo mb_substr($str,0,4,'UTF-8');
//输出结果为“米虫先生”
mbstring()函数截取内容时填入的长度为真实长度,即所见即所得的长度。
但需要指定正确的字符集,函数会依照字符集对具体的内容进行字节单元的截取。
$str = '米虫Sir真是个大帅比';
//输出结果为“米虫Sir”
//并不会因为中英文混合场景进行长度计算
echo mb_substr($str,0,5,'UTF-8');
mb_substr()函数来自mbstring扩展库,mb_strcut()也可以达成该效果。
使用mb_substr()函数的时候要注意php文件的编码以及网页显示时的编码。
建议统一使用UTF-8编码。
尽量不要通过txt打开或编写PHP和HTML文件。
<!DOCTYPE HTML>
<html>
<head>
<!-- 指定网页编码 -->
<meta charset="UTF-8">
</head>
<body>
</body>
</html>
当前还没有观点发布,欢迎您留下足迹!