2012-03-07 52 views
2

這個代碼打印 「不」,但它應打印 「OK」 和兩個UTF8編碼在不同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鍵入

回答

4

您的Unicode字符串是不同與...用空格這裏顯示開始高亮顯示了這一點:

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

編輯:爲了好奇...

screen shot of text in sublime editor

似乎它們在t中的標籤中顯示的相同該文件必須具有將字符組合在一起的字體特徵,但在代碼體中以不同的方式顯示,實際上它們顯示在前面。

+0

你是怎麼看到這件事的?這也是我的第一個想法,但在我的瀏覽器中,至少這些字符串在外觀上看起來完全相同。 – 2012-03-08 00:01:26

+0

同樣在我的瀏覽器中 – 2012-03-08 00:05:15

+0

我的vi的味道,它不會做從右到左的語言,顯示非常清楚。 – thetaiko 2012-03-08 00:05:44

1

編輯:

比利的完全正確(+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