我试图从某些网页获取“链接”元素。我无法弄清楚我做错了什么。我收到以下错误:
严重性:警告
消息: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.";
}
答案 0 :(得分:37)
这意味着某些HTML代码无效。 这只是一个警告,而不是错误。您的脚本仍将处理它。要取消设置警告
libxml_use_internal_errors(true);
或者你可以通过
完全抑制警告@$dom->loadHTML($html);
答案 1 :(得分:13)
这可能是由一个流氓&
符号引起的,该符号会立即被正确的标记所取代。否则,您将收到丢失的;
错误。请参阅:Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity,。
解决方案是 - 用&
替换&
符号
或者,如果您必须保留&
,那么可能您可以将其括在:<![CDATA[
- ]]>
答案 2 :(得分:2)
HTML格式不佳。如果形成得不够,将HTML加载到DOM文档中甚至可能会失败。如果loadHTML不起作用,那么抑制错误毫无意义。我建议使用像HTML Tidy这样的工具来清理&#34;如果您无法将HTML加载到DOM中,那么格式不正确的HTML。
HTML Tidy可以在http://www.htacg.org/tidy-html5/
找到