PHP DOMDocument::loadHTML()[DOMDocument.loadHTML]:HTMLPARSENTITYREF:实体中没有名称

PHP DOMDocument::loadHTML()[DOMDocument.loadHTML]:HTMLPARSENTITYREF:实体中没有名称,php,html-parsing,domdocument,Php,Html Parsing,Domdocument,我试图从某些网页获取“链接”元素。但我不知道我做错了什么。我得到以下错误: 严重性:警告 消息:DOMDocument::loadHTML()[DOMDocument.loadHTML]: HTMLParserEntityRef:实体中没有名称,行:536 文件名:controllers/test.php 电话号码:34 第34行代码如下所示: 我的代码: $url = "http://www.amazon.com/"; $ch = curl_init();

我试图从某些网页获取“链接”元素。但我不知道我做错了什么。我得到以下错误:

严重性:警告

消息:DOMDocument::loadHTML()[DOMDocument.loadHTML]: HTMLParserEntityRef:实体中没有名称,行:536

文件名:controllers/test.php

电话号码:34

第34行代码如下所示:

我的代码:

            $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.";
    }
$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);
如果($html=curl\u exec($ch)){
//将html解析为文档
$dom=新的DOMDocument();
$dom->recover=true;
$dom->strigerrorchecking=false;
$dom->loadHTML($html);
$hrefs=$dom->getElementsByTagName('a');
回声“;
印刷费($hrefs);
回声“;
卷曲关闭($ch);
}否则{
echo“无法访问该网站。”;
}

这意味着某些HTML代码无效。 这只是一个警告,不是错误。您的脚本仍将处理它。要抑制设置的警告,请执行以下操作:

@$dom->loadHTML($html);
或者您可以通过执行以下操作完全抑制警告


这可能是由一个rogue
&
符号引起的,该符号后面紧接着一个正确的标记。否则,您将收到丢失的
错误。请参阅:

解决方案是将
&
符号替换为
&

或者,如果你必须要有
&
,可能你可以把它放在:
-
]>
HTML格式不好。如果格式不够糟糕,将HTML加载到DOM文档甚至可能失败。如果loadHTML不起作用,那么抑制错误是没有意义的。如果无法将HTML加载到DOM中,我建议使用HTMLTidy之类的工具来“清理”格式不良的HTML


HTML Tidy可在此处找到

更改为谷歌友好的url。如果不适合您,请将其还原。您能看到这个吗?是否确实设置了libxml\u use\u internal\u errors(true);在php脚本的顶部?我还更新了我的答案,提供了另一个隐藏警告的选项,但它返回了一个奇怪的空对象。我运行了你的代码,它运行得很好。它返回了一堆对象。您的print_r语句输出了DOMNodeList对象([length]=>81)-1,用于建议抑制该行上的所有错误。这将导致调试噩梦。如果不是那样的话,我会给你一个+1。这是一个糟糕的解决方案,永远不要这样做……如果你想禁止错误输出到浏览器,你可以做一些类似于ob_start()的事情;。。。此处的命令….$buf=ob_get_clean(),然后检查$buf是否有任何错误输出,这将允许您保留错误,但停止浏览器输出在我的情况下,我输出了一个包含
标记之间的符号的变量,即
$variable['component']=“7&8”$t正文=“”$变量['component']。"";导致此错误:
消息:DOMDocument::loadHTML()[DOMDocument.loadHTML]:htmlparserentityref:实体中没有名称
 libxml_use_internal_errors(true);
@$dom->loadHTML($html);