2012-08-09 109 views
4

在一些我解析的XML文件(通常是RSS)我碰到包含了像Today’s Newest字符的文本運行,這正在成爲Today’s Newest後,我從中提取節點的文本。這告訴我,我處理的解碼過程正確如何正確解碼XML文件中的特殊字符?

我可以簡單地patch my script修復這個錯誤一個,但如果有正在成爲亂碼許多其他字符?將XML文件轉換爲UTF-8腳本時,如何在不廢棄編碼的情況下對XML文件進行消解的正確方法是什麼?

這裏有一些我已經試過了事情似乎並不十分工作:

$xml = file_get_contents($file); 

// One: still contains ’ 
//$xml = @iconv('UTF-8', 'UTF-8//IGNORE', $xml); 

// Two: LibXMLError Entity 'rsquo' not defined 
//$xml = htmlentities($xml, null, 'UTF-8'); 
//$xml = htmlspecialchars_decode($xml, ENT_QUOTES); 

// Three: still contains ’ 
//$xml = mb_convert_encoding($xml, "UTF-8", "UTF-8"); 

$xml = simplexml_load_string($xml, null, LIBXML_NOCDATA | LIBXML_NOENT); 
+1

檢查你如何輸出你的內容。如果輸出目標不支持UTF-8,也可能發生這種情況。我假設你輸出到瀏覽器,所以檢查瀏覽器編碼,並嘗試明確地將其設置爲UTF-8,因爲你可能從XML獲得正確的文本,但它只是顯示錯誤。如果上面沒有幫助,請嘗試使用DOMDocument加載XML。 – zysoft 2012-08-09 15:21:57

+0

看到這種情況; - http://stackoverflow.com/questions/9123370/special-characters-from-xml-file-dont-display-correctly-using-php – 2012-08-09 15:24:45

+0

@zysoft,即解決了'†™問題!由於XML越來越大,我停止使用CLI進行調試並將其移至瀏覽器。我不相信我忘了檢查我的標題! '頭( '內容 - 類型:文本/ HTML;字符集= 「UTF-8」');' – Xeoncross 2012-08-09 15:25:42

回答

1

檢查你如何輸出你的內容。 如果輸出目標不支持UTF-8,也可能發生這種情況。

我假定你輸出到瀏覽器,因此瀏覽器檢查編碼,並嘗試明確將其設置爲UTF-8,你可能會從XML正確的文本,但它只是顯示錯誤。

也可以嘗試加載XML與DOMDocument如果上述不幫助

+0

'頭( '內容 - 類型:文本/ HTML;字符集= 「UTF-8」');' – Xeoncross 2012-08-10 18:56:12

1

試試這個:

$xml = simplexml_load_string($xml, null, LIBXML_NOCDATA | LIBXML_NOENT); $xml->addAttribute('encoding', 'UTF-8');