为什么这个str_ireplace()在非ASCII字符串上工作?

ale*_*lex 7 php utf-8 character-encoding

注意:我认为我知道的可能是错的,所以请妥善修复我的知识:)


我刚回答了一个关于UTF-8和PHP的问题.

我建议使用str_ireplace('?????????', '', $a).

我没想到这会起作用,但确实如此.

我一直认为PHP将一个字节视为一个字符,因此mb_*当使用ASCII范围之外的字符时,为什么需要使用函数来获得准确的结果.

我假设俄语字符各占1个字节.

我认为str_replace()可以工作,因为无论字节是否是多字节都可以匹配,只要它们是有序的.

我想str_ireplace()不会工作,因为PHP不知道如何将非ASCII字符映射到他们的另一种情况等同.但是,它确实有效.


我错在哪里以及如何?给我尽可能多的信息:)

Ign*_*ams 6

它通过将文本传递给依赖于语言环境设置的libc函数来使文本小写起作用; 适当的设置意味着如果正确的字符集用于字节,文本将正确地小写.