我试图从一个PHP网站中提取DOM,然后在上面运行一些xpath。代码应该很简单,但我总是会遇到编码错误。
我已经研究了错误消息,并尝试使用mb_convert_encoding()应用编码(如其他堆栈溢出文章中所述),但它没有解决问题。
我试图提取的网站使用的是UTF-8,所以使用mb_convert_encoding()函数应用UTF-8编码来修复这个问题就我所知没有多大意义。
这是我的代码,应该可以复制到其他地方。正如您所看到的,我在某个时候尝试了两种方法来应用编码。
我想我使用的是正确的函数loadHTML(),而不是loadHTMLfile()。是否可以使用“获取文件内容”提取文件以将其输入此函数?
$url = 'http://duckduckgo.com/';
if(! $file = file_get_contents($url) )
echo 'File get contents failed.';
$doc = new DOMDocument();
//$doc->loadHTML( mb_convert_encoding($file,'HTML-ENTITIES','UTF-8') );
$doc->loadHTML( '<?xml version="1.0" encoding="UTF-8"?>'.$file );
$xpath = new DOMXpath($doc);
$elements = $xpath->query("*/div[@id='logo_homepage_link']");
if (!is_null($elements)) {
foreach ($elements as $element) {
echo "
[". $element->nodeName. "]";
$nodes = $element->childNodes;
foreach ($nodes as $node) {
echo $node->nodeValue. "\n";
}
}
}
?>
错误是:
警告:domDocument::loadHTML():htmlCheckEncoding:未知编码
utf-8;字符集=utf-8英寸实体,行:11英寸
C:\websites\domxpath\index.php,第10行