使用这个命令:
$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