PHP截取指定长度的字符串mb_substr()

PHP中常见的截取字符串substr()函数使用非常容易,但是有时针对中文截取时会出现乱码问题(主要是由于编码类型导致),可以通过mb_substr()处理,其差异在于需要指定文字字符集即可解决

所属分类 PHP

相关标签 字符串乱码截取

substr()函数

语法:substr(string,start,length)

说明:substr(字符串,开始坐标,长度)

$str = '米虫先生真是个大帅比';
echo substr($str,0,12);
//输出结果为“米虫先生”

上面案例中明明输入了12位但实际只出现4个字?

中文UTF-8编码,每个汉字占3字节(一般情况下服务器都会习惯采用UTF编码)。

当然如果GB2312编码模式先,中文占2字节。

而英文则占1字节,基本上大部分编码模式下皆是如此。

从上面结果里看,如果我指定长度为3的倍数一般不会有问题?

如果你的文本确认全是中文一般不会出现乱码问题,但如果字符串中包含英文、数字或者半角符号...

那在长度结尾处,substr()函数很有可能硬生生地将一个中文字符“锯”成两半,因此就产生了乱码问题。

mb_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>

米虫

做一个有理想的米虫,伪全栈程序猿,乐观主义者,坚信一切都是最好的安排!

本站由个人原创、收集或整理,如涉及侵权请联系删除

本站内容支持转发,希望贵方携带转载信息和原文链接

本站具有时效性,不提供有效、可用和准确等相关保证

本站不提供免费技术支持,暂不推荐您使用案例商业化

选择个人头像

昵称

邮箱

QQ

网址

评论提示

  • 头像:系统为您提供了12个头像自由选择,初次打开随机为你选择一个
  • 邮箱:可选提交邮箱,该信息不会外泄,或将上线管理员回复邮件通知
  • 网址:可选提交网址,评论区该地址将以外链的形式展示在您的昵称上
  • 记忆:浏览器将记忆您已选择或填写过得信息,下次评论无需重复输入
  • 审核:提供一个和谐友善的评论环境,本站所有评论需要经过人工审核