PHP DOM Xpath - 试图从网站中提取 DOM - 未知编码错误
PHP DOM Xpath - trying to extract DOM from websites - unknown encoding error
我正在尝试从 PHP 中的网站提取 DOM,然后 运行 在其上提取一些 Xpath。代码应该很简单,但我不断收到编码错误。
我已经研究了错误消息并尝试使用 mb_convert_encoding() 应用编码(如其他堆栈溢出帖子中所述),但它没有解决问题。
我试图提取的网站使用 UTF-8,因此据我所知,使用 mb_convert_encoding() 函数应用 UTF-8 编码来解决问题没有多大意义。
这是我的代码,应该可以复制到别处。如您所见,我已经尝试了两种方法来在某些时候应用编码。
我想我使用的是正确的函数 loadHTML() 而不是 loadHTMLFile()。是否可以使用 file_get_contents 提取文件以将其提供给此函数?
<?php
$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 "<br/>[". $element->nodeName. "]";
$nodes = $element->childNodes;
foreach ($nodes as $node) {
echo $node->nodeValue. "\n";
}
}
}
?>
错误是:
Warning: DOMDocument::loadHTML(): htmlCheckEncoding: unknown encoding
UTF-8;charset=utf-8 in Entity, line: 11 in
C:\Websites\domxpath\index.php on line 10
不确定这是错误还是功能,但代码反对行中的双重编码...
<meta http-equiv="content-type" content="text/html; charset=UTF-8;charset=utf-8">
如果你只用 UTF-8 替换它,它至少会通过这部分...
$file = str_replace("UTF-8;charset=utf-8", "UTF-8", $file);
只需将其放在 loadHTML()
行之前。
我正在尝试从 PHP 中的网站提取 DOM,然后 运行 在其上提取一些 Xpath。代码应该很简单,但我不断收到编码错误。
我已经研究了错误消息并尝试使用 mb_convert_encoding() 应用编码(如其他堆栈溢出帖子中所述),但它没有解决问题。
我试图提取的网站使用 UTF-8,因此据我所知,使用 mb_convert_encoding() 函数应用 UTF-8 编码来解决问题没有多大意义。
这是我的代码,应该可以复制到别处。如您所见,我已经尝试了两种方法来在某些时候应用编码。
我想我使用的是正确的函数 loadHTML() 而不是 loadHTMLFile()。是否可以使用 file_get_contents 提取文件以将其提供给此函数?
<?php
$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 "<br/>[". $element->nodeName. "]";
$nodes = $element->childNodes;
foreach ($nodes as $node) {
echo $node->nodeValue. "\n";
}
}
}
?>
错误是:
Warning: DOMDocument::loadHTML(): htmlCheckEncoding: unknown encoding UTF-8;charset=utf-8 in Entity, line: 11 in C:\Websites\domxpath\index.php on line 10
不确定这是错误还是功能,但代码反对行中的双重编码...
<meta http-equiv="content-type" content="text/html; charset=UTF-8;charset=utf-8">
如果你只用 UTF-8 替换它,它至少会通过这部分...
$file = str_replace("UTF-8;charset=utf-8", "UTF-8", $file);
只需将其放在 loadHTML()
行之前。