假设我用 UTF-8 编码我的文件。
在 PHP 脚本中,将比较一个字符串:
$string="ぁ";
$string = utf8_encode($string); //Do i need this step?
if(preg_match('/ぁ/u',$string))
//Do if match...
没有 utf8_encode() 函数的 string 真的是 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 字符在 ASCII 和 UTF-8 中都使用相同的字节表示。因此 "
被 PHP 解释为 "
而不管它应该以 ASCII 还是 UTF-8 格式保存。引号之间的任何内容,PHP 仅将其视为文字位序列。所以 PHP 将您的 "あ"
视为 "11100011 10000001 10000010"
。它不关心引号之间到底是什么,它只会按原样使用它。
关于php - utf8_encode 函数用途,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6700275/