rtrim函数的一个坑

WBOY
Freigeben: 2016-07-28 08:25:48
Original
1144 Leute haben es durchsucht

简述一下今天遇到的问题:
在我的代码里面有如下代码段:

<code><span><span><?php </span>
    header(<span>"Content-type:text/html;charset=utf8"</span>);
    <span>echo</span> rtrim(<span>"威、"</span>,<span>"、"</span>);</span></span></code>
Nach dem Login kopieren

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

<code><span><span><?php </span><span>echo</span> rtrim(<span>"blakefezabc"</span>, <span>"cab"</span>);
    <span>//output blakefez</span></span></span></code>
Nach dem Login kopieren

是的,输出结果是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教程有兴趣的朋友有所帮助。

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!