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

时间:2012-09-08 05:37:40

标签: php html-parsing domdocument

我试图从某些网页获取“链接”元素。我无法弄清楚我做错了什么。我收到以下错误:

  

严重性:警告

     

消息: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.";
    }

3 个答案:

答案 0 :(得分:37)

这意味着某些HTML代码无效。 这只是一个警告,而不是错误。您的脚本仍将处理它。要取消设置警告

 libxml_use_internal_errors(true);

或者你可以通过

完全抑制警告
@$dom->loadHTML($html);

答案 1 :(得分:13)

这可能是由一个流氓&符号引起的,该符号会立即被正确的标记所取代。否则,您将收到丢失的;错误。请参阅:Warning: DOMDocument::loadHTML(): htmlParseEntityRef: expecting ';' in Entity,

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

答案 2 :(得分:2)

HTML格式不佳。如果形成得不够,将HTML加载到DOM文档中甚至可能会失败。如果loadHTML不起作用,那么抑制错误毫无意义。我建议使用像HTML Tidy这样的工具来清理&#34;如果您无法将HTML加载到DOM中,那么格式不正确的HTML。

HTML Tidy可以在http://www.htacg.org/tidy-html5/

找到