PHP 源码探秘——为什么 trim 会导致乱码

运行以下代码:

我们可能以为会得到的结果是 ,实际结果是 。为什么会这样呢?

科普

PHP 里使用 前缀的都是多字节函数:http://php.net/manual/zh/ref.mbstring.php。

比如:

系列函数是以“多个字节组成的一个字符”为颗粒度来操作的,不带 则是按实际的字节数来操作的。

原理

函数文档:

该函数不是多字节函数,也就是说,汉字这样的多字节字符,会拿其头或尾的单字节来和后面的 对应的char数组进行匹配,如果在后面的数组中,则删掉,继续匹配。比如:

如下面的 demo 中的函数 所示:

由 三字节组成,

由 三字节组成。

所以在执行 的时候,通过字节比对,会将 去掉,导致了最后出现了乱码。

源码探究

查看 PHP7 的源码,然后提炼出下面的小 demo ,方便大家一起学习,其实PHP源码的学习并不难,每天进步一点点。

如果觉得 demo 还不够清晰的,复制下来,自己执行一次吧~

C 语言基础较差的同学也不用担心,我准备后面专门写一个PHP小白学习 C 语言的系列入门短文哈。

解决方案

那么我们就依葫芦画瓢,用 php 本身的多字节函数来实现下吧:

当然你也可以使用正则来做。通过上面的函数学习,单字节函数和多字节函数,你学会了吗?

PHP7 相关源码

原文:https://segmentfault.com/a/1190000011619308

前端教程

关注即可习得新技能

觉得本文对你有帮助?请分享给更多人。

关注「程序员宝库」公众号,直接获取各种编程资料!

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180131A1EEUZ00?refer=cp_1026

同媒体快讯

相关快讯

扫码关注云+社区