欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

rtrim函数的一个坑

程序员文章站 2022-03-24 11:30:30
...
简述一下今天遇到的问题:
在我的代码里面有如下代码段:

    header("Content-type:text/html;charset=utf8");
    echo rtrim("威、","、");

本来的预想是输出“威”。然而事与愿违,输出了几个乱码。这是为什么呢?容我细细道来。
首先要知道rtrim函数的功能,它的第二个参数是一个string,其中的每个char都会被拿出来作为将要被去除的字符。比如这样:

echo rtrim("blakefezabc", "cab");
    //output blakefez

是的,输出结果是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编码,就变成乱码啦。

').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i ').text(i)); }; $numbering.fadeIn(1700); }); });

以上就介绍了 rtrim函数的一个坑,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。