在utf8中进行简单比较,结果错误?

时间:2012-03-07 23:54:23

标签: php encoding utf-8

此代码打印“no”,但它应该打印“ok”并且utf8编码的两个是不同的

$a="کیهان";
$b="كيهان";
echo utf8_encode($a)."==".utf8_encode($b)."<br>";
if(utf8_encode($a)==utf8_encode($b))
    echo "ok";
else
    echo "no";

结果:

Ú©ÛÙاÙ==ÙÙÙاÙ
no

那是什么??

编辑:复制$ a并输入$ b

2 个答案:

答案 0 :(得分:4)

你的unicode字符串是不同的开头...这里显示的是空格点到点:

$a="ک ی ه ن";
$b="ك ي ه ن";

编辑: 出于好奇心的缘故......

screen shot of text in sublime editor

似乎它们在文件顶部的选项卡中显示相同,它必须具有将字符组合在一起的字体功能,但在代码体中显示的方式不同,它实际上显示在前面。

答案 1 :(得分:1)

编辑:

Billy完全正确(+1)关于字符串不相等的原因。这个答案可以解释为什么你在转换后看到垃圾文本。

我猜你的原始编码不是ISO-8859-1。

请参阅the docs中的第一条评论。

  

请注意,utf8_encode仅转换编码的字符串   ISO-8859-1至UTF-8。一个更恰当的名称   “iso88591_to_utf8”。如果你的文字没有用ISO-8859-1编码,你可以   不需要这个功能。如果您的文本已经是UTF-8,则不会   需要这个功能。 实际上,将此功能应用于文本   未在ISO-8859-1中编码,很可能只是简单地将该文本弄乱。

您可能需要iconv