运行以下代码:
我们可能以为会得到的结果是 ,实际结果是 。为什么会这样呢?
科普
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
前端教程
关注即可习得新技能
!
觉得本文对你有帮助?请分享给更多人。
关注「程序员宝库」公众号,直接获取各种编程资料!
领取专属 10元无门槛券
私享最新 技术干货