php - utf8_encode 函数用途

标签 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...

没有 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/

相关文章:

php - 如何在 PHP 字符串比较中模拟 MySQLs utf8_general_ci 排序规则

php - Laravel 迁移的外键问题

php - 如何将数据传递到我在 Laravel 5.3 中创建的模板文件

javascript - 如何提取属性中值的一部分

javascript - 如何制作仅捕获一个符号但有限制的正则表达式?

java - java中utf8的问题

php - 如何在 Fullcalendar 中保存事件?

javascript - 使用 AJAX PHP 显示数据

c# - 用于查找 ASP.Net 页面多行注释的正则表达式

ruby-on-rails - ruby 将 "\x\x"格式编码为 utf8 字符串或以当前形式存储在 rails postgres db 中