php-解惑篇
php 的 ltrim
函数为什么会乱码?
场景
在 laravel
论坛中发现有人提出了这个问题 ltrim('你好世界', '你好')
,结果返回了乱码数据,然后不知道是怎么产生乱码的。
问题刨析
php
在官网教程中明显说明涉及中文的操作都要使用 mb_
前缀函数,这里其实是多字节编码导致的。 php
默认处理的是 ascii
码,然后中文的话默认都是多字节,所以使用 ltrim
时就会出现乱码问题。
1 |
|
打印结果:
1 | string(24) "4EDB0A5E5ADB4E8B697E59C8" |
上面的结果是 16 进制显示的结果,拆分出来就是你:4EDB0A 好:5E5ADB 世:4E8B69 界:7E59C8
,然后一个字节 8 比特,所以你字由 4E DB 0A
三个字节构成了。所以 ltrim
要过滤的数组就变成了[4E, DB, 0A, 5E, 5A, DB]
。
总结
查看过滤数组发现,世字第一个字节会被抹去,然后才会找到非过滤元素,ltrim
函数才能结束。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 梧桐树下!
评论