我试图从某些网页中获取"链接"元素。不过我不明白我做错了什么。我得到以下错误:
严重性:警告
消息:DOMDocument::loadHTML()[DOMDocument.loadHTML]:htmlParseEntityRef:实体中没有名称,行:536
文件名:controllers/test.php
线路编号:34
代码中的第34行如下:
$dom->loadHTML($html);
我的代码:
$url = "http://www.amazon.com/";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
if($html = curl_exec($ch)){
// parse the html into a DOMDocument
$dom = new DOMDocument();
$dom->recover = true;
$dom->strictErrorChecking = false;
$dom->loadHTML($html);
$hrefs = $dom->getElementsByTagName('a');
echo "<pre>";
print_r($hrefs);
echo "</pre>";
curl_close($ch);
}else{
echo "The website could not be reached.";
}
这意味着某些HTML代码无效。这只是一个警告,而不是一个错误。您的脚本仍将处理它。要抑制警告,请设置
libxml_use_internal_errors(true);
或者你可以通过完全抑制警告
@$dom->loadHTML($html);
这可能是由一个错误的&
符号引起的,该符号紧接着是一个正确的标记。否则,您将收到一个丢失的;
错误。请参阅:警告:DOMDocument::loadHTML():htmlParseEntityRef:预期'';在实体中,。
解决方案是用&
替换&
符号
或者,如果您必须拥有&
,那么可能是,您可以将其包含在:<![CDATA[
-]]>
HTML格式不正确。如果格式不够糟糕,将HTML加载到DOM文档中甚至可能失败。如果loadHTML不起作用,那么抑制错误是没有意义的。如果您无法将HTML加载到DOM中,我建议使用像HTMLTidy这样的工具来"清理"格式错误的HTML。
HTML Tidy可以在这里找到http://www.htacg.org/tidy-html5/