2015-02-07 85 views
2

我有兩個字符串,在UTF-8中看起來完全相同。utf8_decode():UTF-8中的相同字符串返回不同的結果(PHP)

$string1 = "histórico"; 
$string2 = "histórico"; 

,但是當我將它們轉換爲ISO-8859-1,(它doesn't介意我用utf8_decodeiconvmb_convert_encoding)我得到不同的輸出爲他們:

  • 的字符串1轉換到histoÌrico
  • 的字符串2轉換成histórico(也就是,其實我所期待的兩個字符串)

任何想法?

在此先感謝!

+0

<? $ cadena1 =「histoïrico」; $ cadena2 =「histórico」; echo utf8_decode($ cadena1); echo utf8_decode($ cadena2); ?> – user2261050 2015-02-07 11:41:34

+0

爲什麼你「期望」「histórico」...? – deceze 2015-02-07 11:45:46

+0

以及我必須使用ISO-8859-1字符串,他們應該看起來一樣...但他們不(事實上,如果我在屏幕上打印他們只有第二個將顯示ó字符) – user2261050 2015-02-07 11:54:46

回答

2

two ways of creating the character ó in Unicode

  • 作爲單個字符:U+00F3
  • 作爲一個小寫o,其次是結合重音符號´U+006F U+0301

渲染後,他們看起來完全相同。

+0

我怎樣才能將U + 006F U + 0301字符轉換爲ISO-8859-1?恐怕它沒有對應關係(並且與其他許多字符一樣) – user2261050 2015-02-07 11:49:15

+0

我不熟悉PHP處理Unicode字符串的方式,但是您必須將字符串*編碼爲8859-1,而不是*解碼*它。如果PHP的編碼函數無法處理分解的表單,那麼可能需要首先[標準化](http://php.net/manual/de/class.normalizer.php)該字符串。對不起,沒有更多的幫助 - 我可以向你展示Python代碼需要的兩行代碼,但就PHP而言,我是一個完整的noob ... – 2015-02-07 11:53:14

+0

如果我「編碼」爲8859-1,使用iconv()或mb_convert_encoding()我得到相同的結果... – user2261050 2015-02-07 11:56:27

相關問題