php - PHP DOM Xpath - 试图从网站中提取 DOM - 未知的编码错误
问题描述
我正在尝试从 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";
}
}
}
?>
错误是:
警告:DOMDocument::loadHTML(): htmlCheckEncoding: 未知编码 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()
行之前。
推荐阅读
- r - r 删除矩阵的对称元素
- sql - 为什么有索引时查询运行这么慢?
- scala - 仅调用一次方法并应用过滤器将结果保存在scala中的不同变量中
- asp.net - IE11 上的 Fontawesome 5 错误
- android - 电报上的构建命令失败
- typescript - 如何在 Angular 6 的主 div 中获取每个 div?
- node.js - Heroku 中的节点应用程序崩溃 - 错误:找不到模块
- python - 在python中添加带有重音符号的pdf元数据
- jquery - “监听”滑块/文本字段的更改并更新第二个文本字段
- sql - 我通过 ASP.NET Web 应用程序输入的单元格不会在 SQL Server 中求和