utf8_encode功能目的

nEA*_*nam 7 php regex utf-8 character-encoding

假设我用UTF-8编码我的文件.

在PHP脚本中,将比较一个字符串:

$string="?";
$string = utf8_encode($string); //Do i need this step?
if(preg_match('/?/u',$string))
//Do if match...
Run Code Online (Sandbox Code Playgroud)

它的字符串真的是没有utf8_encode()函数的UTF-8?如果用UTF-8编码文件,不需要这个功能吗?

dec*_*eze 11

如果您阅读手册条目utf8_encode,它会将ISO-8859-1编码的字符串转换为UTF-8.函数名称是一个可怕的误称,因为它表明某种必要的自动编码.事实并非如此.如果您的源代码保存为UTF-8并且您指定了"あ" $string,则$string保留以UTF-8编码的字符"あ".无需采取进一步行动.实际上,尝试将UTF-8字符串(错误地)从ISO-8859-1转换为UTF-8会使其变得混乱.

为了详细说明,您的源代码将被读取为字节序列.PHP在ASCII中解释对它很重要的东西(所有关键字和运算符等).UTF-8向后兼容ASCII.这意味着,所有"普通"ASCII字符都使用ASCII和UTF-8中的相同字节表示.因此,无论是否应该以ASCII或UTF-8保存,a都"被解释为"PHP.引号之间的任何内容,PHP只是作为文字位序列.所以PHP认为你"?""11100011 10000001 10000010".它并不关心引号之间究竟是什么,它只是按原样使用它.