假设即时通讯使用UTF-8编码我的文件。

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

$string="ぁ";
$string = utf8_encode($string); //Do i need this step?
if(preg_match('/ぁ/u',$string))
//Do if match...

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

最佳答案

如果您阅读 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 和 UTF-8 中,所有“正常”ASCII 字符都使用相同的字节表示。所以 " 被 PHP 解释为 ",不管它是应该保存在 ASCII 还是 UTF-8 中。引号之间的任何内容,PHP 都只是简单地作为文字位序列。所以 PHP 将您的 "あ" 视为 "11100011 10000001 10000010" 。它并不关心引号之间到底是什么,它只会按原样使用它。

10-07 19:28
查看更多