2013-04-18 39 views
1

MySQL數據庫返回utf8編碼文本。基本上,我用PDO屬性MYSQL_ATTR_INIT_COMMAND並通過:php-utf8對文本進行兩次編碼。它會有什麼負面影響?

SET CHARACTER SET utf8 

它返回utf8編碼的文本。但是數據庫中的一些文本是純文本utf8,像&alum;這樣的東西是按原樣返回的。

所以我需要在php中再次撥打utf8_encode來獲得實際的utf8 char。它的工作正常。

我想知道,如果它會對編碼文本兩次產生任何負面影響,或者它不會影響除編碼上述非編碼文本之外的其他任何內容?

謝謝!

編輯:

我使用下面的代碼可以得到正確的字符:

$val = utf8_encode(addslashes(html_entity_decode(strip_tags($val)))); 

所以它的作用是從轉換以下文字:

<font color=\"#222222\" face=\"arial, sans-serif\" size=\"2\"> Test Event &nbsp; &nbsp;</font><span style=\"color: rgb(34, 34, 34); font-family: arial, sans-serif; font-size: 13px;\">Pers&ouml;nlichkeit Universit&auml;t&quot;</span> 

(本文來自數據庫,在調用SET CHARACTER SET utf8

到:

Test Event Persönlichkeit Universität\" 
+1

我不明白你的問題的話。出於某種原因,大家似乎認爲'utf8_encode()'是一個神奇的函數,它可以自動修復任何編碼問題。它不是,只是從ISO-8859-1轉換爲UTF-8。'&alum;'是一個HTML實體。所有這些字符(&-a-l-u-m;)在ISO-8859-1和UTF-8中都是一樣的,所以'utf8_encode()'什麼都不做。哪一個沒有那麼糟 - 在其他情況下,它只會破壞你的數據。 –

+0

這就是對的。我想我需要在那裏更詳細。我要編輯問題 –

+0

不。我只是想知道是否會對utf8編碼文本兩次產生任何負面影響。乾淨利落。 –

回答

2

&auml;是,可能不應該去到你的數據庫中首先是一個HTML實體。它與UTF-8無關。

如果您致電utf8_encode"&auml;"沒有什麼會發生,因爲ISO-8859-1和UTF-8的編碼是相同的。您將在瀏覽器中看到它所表示的字符,因爲它被解釋爲html。

作爲普通的網絡應用程序開發人員,您絕不應該撥打utf8_encode。你實際上不需要ISO-8859-1到UTF-8的轉換,首先是因爲瀏覽器和MySQL不支持它。爲了兼容性,它們將Latin1和ISO-8859-1替換爲Windows-1252。其次,您可以讓瀏覽器和數據庫以UTF-8發送數據,因此它已經是UTF-8,不需要轉換。

你不應該轉換爲html實體 - 這是不必要的,因爲UTF-8可以表示所有字符。

數據庫中的數據不應該有任何關於html的問題 - 那裏的數據應該是規範的authorative as-is表示數據。現在有困惑是否該數據實際上是從字面上的意思是&auml;ä這會導致這樣的問題:

enter image description here

圖片來自TheDailyWTF

相關問題