2012-10-01 97 views
4

我運行下面的代碼:DOMDocument打破編碼?

$page = '<p>Ä</p>'; 
$DOM = new DOMDocument; 
$DOM->loadHTML($page); 
echo 'source:'.$page; 
echo 'dom: '.$DOM->getElementsByTagName('p')->item (0)->textContent; 

它輸出以下內容:

資料來源:A

DOM:謾

所以,我不明白爲什麼當文本通過DOMDocument來時,它的編碼會被破壞?

回答

3

DOMDocument似乎將輸入視爲UTF-8。在此轉換中,Ä變爲Ä。這裏有一個問題:第二個字符在ISO-8859-1中不存在,但在Windows-1252中存在。這就是爲什麼你在輸出中看不到第二個字符的原因。

您可以通過在textContent的輸出上調用utf8_decode或使用UTF-8作爲頁面的字符編碼來解決此問題。

+0

謝謝,utf8_decode做的工作。 – Mike

+0

剛剛也遇到了這個問題,不幸的是遇到了一個utf8_decode無法幫助的情況。 iconv(「UTF-8」,「CP1252」,$ data)來拯救! (更多信息:http://us2.php.net/manual/en/function.utf8-decode.php#104907) – MBaas

8

下面是通過元頭部添加了正確的編碼解決方法:

$DOM->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />' . $page); 

我不知道這是實際的字符集,你正在嘗試使用,但調整必要

另請參閱:domdocument character set issue

+0

謝謝,這也適用。 – Mike

+0

Domdocument對文檔編碼的解析似乎被破壞了。此外,這種解決方法是我可以不破壞UTF-8頁面的文本內容的唯一方式,它無法識別爲utf-8。 –