简述一下今天遇到的问题:
在我的代码里面有如下代码段:
<span><span><?php</span> header(<span>"Content-type:text/html;charset=utf8"</span>); <span>echo</span> rtrim(<span>"威、"</span>,<span>"、"</span>);</span>
本来的预想是输出“威”。然而事与愿违,输出了几个乱码。这是为什么呢?容我细细道来。
首先要知道rtrim函数的功能,它的第二个参数是一个string,其中的每个char都会被拿出来作为将要被去除的字符。比如这样:
<span><span><?php</span><span>echo</span> rtrim(<span>"blakefezabc"</span>, <span>"cab"</span>); <span>//output blakefez</span></span>
是的,输出结果是blakefez。
这个函数的实现应该也比较简单:
①、从第一个参数的最后一个字符开始向左遍历,判断该字节是否在第二个参数中。
②、如果存在则去掉该字节,继续第一步。如果不存在,则结束。
请注意,我上面用的是字节。是的,这个函数是非multibyte-safe的函数。也就是说,当我们的参数中有些字符是多字节的,那么就会产生不想要的结果。比如一开始说的rtrim(“威、”, “、”)。由于”威”和”、”都是utf8编码的。也就是多字节字符。其中,”威”的编码是0xE5 0xA8 0x81,”、”的编码是0xE3 0x80 0x81,所以,在rtrim函数眼里,它看到的是:rtrim(“0xE5 0xA8 0x81 0xE3 0x80 0x81”, “0xE3 0x80 0x81”);所以最后输出的结果就是0xE5 0xA8,这时候再转换为utf8编码,就变成乱码啦。
以上就介绍了 rtrim函数的一个坑,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号