PHP DOMDocument::loadHTML()[DOMDocument.loadHTML]:htmlParseE


PHP DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: no name in Entity

我试图从某些网页中获取"链接"元素。不过我不明白我做错了什么。我得到以下错误:

严重性:警告

消息: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:预期'';在实体中,。

解决方案是用&amp;替换&符号
或者,如果您必须拥有&,那么可能是,您可以将其包含在:<![CDATA[-]]>

HTML格式不正确。如果格式不够糟糕,将HTML加载到DOM文档中甚至可能失败。如果loadHTML不起作用,那么抑制错误是没有意义的。如果您无法将HTML加载到DOM中,我建议使用像HTMLTidy这样的工具来"清理"格式错误的HTML。

HTML Tidy可以在这里找到http://www.htacg.org/tidy-html5/