PHP DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: no name in Entity PHP的DOMDocument::loadHTML()方法出现错误:htmlParseEntityRef: 没有实体名称。

14

我正在尝试从某些网页中获取"link"元素。但是我无法弄清楚我做错了什么。我得到了以下错误:

严重性: 警告

消息: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: no name in Entity, line: 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.";
    }

更改为适合谷歌的URL。如果不适合您,请将其恢复。 - Shiplu Mokaddim
3个回答

42

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

 libxml_use_internal_errors(true);

或者你可以通过执行以下操作来完全禁止该警告

@$dom->loadHTML($html);

你确定在 PHP 脚本顶部设置了 libxml_use_internal_errors(true) 吗?我还更新了我的答案,提供另一种选择。 - Kris
这段程序隐藏了警告,但是它返回了一个空对象。 - David
很奇怪。我运行了你的完全相同的代码,它正常工作。它返回了一堆对象。你的print_r语句输出了DOMNodeList对象 ( [length] => 81 ) - Kris
-1 表示建议在该行抑制所有错误。这将导致调试成为一场噩梦。如果没有这个问题,我本来会给你一个+1的。 - Gerry
@Gerry,Kris在一件事上是错误的 - 脚本不会处理你想要的东西(它会跳过它们),@操作符不仅隐藏消息,还强制脚本继续进行 - 这可能有点危险,但在加载某些糟糕的HTML之类的情况下,它可能是最强大的工具 :) - jave.web
1
这是一个糟糕的解决方案,永远不要这样做...如果你想抑制错误输出到浏览器,你可以做类似于ob_start();...在这里输入命令....$buf=ob_get_clean(),然后检查$buf是否有任何错误输出,这将让你保留错误,但停止浏览器输出。 - Christopher Thomas

15

在我的情况下,我输出了一个包含<td>标签之间的“&”符号的变量,即 $variable['ingredient'] = "7 & 8"; $tbody .= "<td>" . $variable['ingredient'] . "</td>"; 这导致了这个错误:Message: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: no name in Entity - Hmerman6006

2
HTML格式不规范。如果HTML格式足够差,将其加载到DOM文档中可能会失败。如果loadHTML无法工作,则抑制错误是没有意义的。如果您无法将HTML加载到DOM中,请使用类似HTML Tidy这样的工具“清理”不规范的HTML。
HTML Tidy可以在此处找到:http://www.htacg.org/tidy-html5/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接