2011-07-01 38 views
3

我已經在項目中工作,我想知道是否有一個優雅的解決方案,同時幾次現在有問題。XML的人物造型編碼問題

問題 我從Twitter通過XML拉鳴叫並將其上傳到我的DB然而,當我將它們輸出到屏幕中,我得到這些字符:

「搬到dusseldorf.â」 OR tambià © n

如果我有俄羅斯字符,那麼我會得到很多醜陋的盒子。

我想什麼是正確的本地口音的下一個編碼顯示。我認爲UTF-8是可能的。

我在用

  • PHP,MYSQL

在XML文件中讀取後,我做以下,以清理數據:

$data = trim($data); 
    $data = htmlentities($data); 
    $data = mysql_real_escape_string($data); 

我的數據庫排序規則是:utf8_general_ci

網頁字符集是:charset = UTF-8

我認爲這可能與HTML實體有關,但我真的很感謝可以在項目中使用的解決方案。

在此先感謝。

回答

6

替換此行:

$data = htmlentities($data); 

有了這個:

$data = htmlentities($data, null, "UTF-8"); 

這樣,ヶ輛()將獨自離開有效UTF-8字符。欲瞭解更多信息,請參閱the documentation for htmlentities()

+0

偉大的幫助謝謝你! –

2

您需要將您的網絡連接的編碼改爲UTF-8(它通常是ISO-8859-1)。在這裏看到:How can I store the '€' symbol in MySQL using PHP?

調用htmlentities()是不必要的,當你得到的編碼權。我會完全刪除它。你只是要小心使用htmlspecialchars()輸出 HTML中的上下文中的數據。

0

請確保您使用iconv_set_encoding設置您的php內部編碼爲UTF8,並且您使用編碼信息調用htmlentities,如EdoDodo所述。還要確保你是UTF8編碼的數據庫商店,儘管你已經說過了。

0

不能使用htmlentities()在這對XML數據的默認狀態,因爲這個功能產生HTML實體,而不是XML實體。

不同之處在於HTML DTD定義了一系列Web瀏覽器編程解釋的實體代碼。但是大多數XML DTD沒有定義它們(如果XML甚至有DTD)。

默認可用於XML的唯一實體代碼是><&。所有其他實體都需要使用它們的數字實體來呈現。

PHP沒有xmlentities()函數,但是如果您閱讀the manual page for htmlentities(),您會在評論中看到很多人都遇到同樣的問題併發布了他們的解決方案。在快速瀏覽它之後,我建議看看名爲philsXMLClean()的那個。

希望有所幫助。