在一些我解析的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);
檢查你如何輸出你的內容。如果輸出目標不支持UTF-8,也可能發生這種情況。我假設你輸出到瀏覽器,所以檢查瀏覽器編碼,並嘗試明確地將其設置爲UTF-8,因爲你可能從XML獲得正確的文本,但它只是顯示錯誤。如果上面沒有幫助,請嘗試使用DOMDocument加載XML。 – zysoft 2012-08-09 15:21:57
看到這種情況; - http://stackoverflow.com/questions/9123370/special-characters-from-xml-file-dont-display-correctly-using-php – 2012-08-09 15:24:45
@zysoft,即解決了'†™問題!由於XML越來越大,我停止使用CLI進行調試並將其移至瀏覽器。我不相信我忘了檢查我的標題! '頭( '內容 - 類型:文本/ HTML;字符集= 「UTF-8」');' – Xeoncross 2012-08-09 15:25:42