使用這個命令:
$doc->loadHTML($html);
你指揮DOM文檔加載您的字符串$html
$html = '<div id="demo">à la téléchargez mêmes</div>';
與ISO-8859-1編碼。
但你有使用在ISO-8859-1編碼,但在UTF-8編碼並沒有看到/輸入自己的字符串。
因此從技術上說,你輸入錯了那裏;)
然後在另一方面,當你與你的腳本命令返回值:
$xpath->query("//div[@id='demo']")->item(0)->nodeValue;
that value will be UTF-8 encoded(向下滾動到所述註釋部並閱讀有關的字符編碼)。
爲了獲得更好的視野上的文件,調用loadHTML
,這樣可以更好的看清是怎麼回事後直接只輸出它(echo $doc->saveHTML();
,美化):
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
"http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<body>
<div id="demo">
à la téléchargez mêmes
</div>
</body>
</html>
正如你所看到的,您已明確命令插入Atile和非換空間和所有這些其他的字符,該字符串被作爲HTML 4.0和在字符串中的HTML沒來指定的任何特定的字符編碼, the default encoding (ISO-8859-1)使用。
因此,對於你在那裏做,你還可以與現有的覆蓋這一點,並有更多的信息材料閱讀:
除了answer given in the first of the two還有一種方法可以在您的情況下執行此操作:
$saved = libxml_use_internal_errors(true);
$result = $doc->loadHTML('<?xml>' . $html);
########
libxml_use_internal_errors($saved);
if ($result) {
$doc->removeChild($doc->documentElement->previousSibling);
}
這個例子不僅增加了適當的錯誤處理和返回值檢查,如果HTML可以實際加載或不加載,它還將字符串前綴爲魔術字符「<?xml>
」,將loadHTML
設置爲UTF-8模式。在使用UTF-8編碼加載HTML字符串之後,將再次刪除DOMProcessingInstruction。該編碼將保留:
$xpath = new DOMXpath($doc);
echo $xpath->query("//div[@id='demo']")->item(0)->nodeValue;
# prints "à la téléchargez mêmes" now
搜尋在許多differen PHP版本的在線演示在這裏:http://3v4l.org/TT3SM
試着看一下[這個答案](http://stackoverflow.com/questions/2142120/php-encoding -with-domdocument) –
@BogdanKuštan謝謝!這是工作 – Vitaly