DOMDocument :: loadHTML():warning - htmlParseEntityRef:实体中没有名称

时间:2013-02-01 14:25:39

标签: php warnings domdocument

我发现了几个类似的问题,但到目前为止,没有人能够帮助我。

我正在尝试输出' src' HTML块中的所有图像,所以我使用DOMDocument()。这种方法非常有效,但我在某些页面上收到警告,但我无法弄清楚原因。有些帖子建议压制警告,但我更愿意找出警告产生的原因。

  

警告:DOMDocument :: loadHTML():htmlParseEntityRef:中没有名字   实体,行:10

生成错误的post->post_content的一个示例是 -

On Wednesday 21st November specialist rights of way solicitor Jonathan Cheal of Dyne Drewett will be speaking at the Annual Briefing for Rural Practice Surveyors and Agricultural Valuers in Petersfield.
<br>
Jonathan is one of many speakers during the day and he is specifically addressing issues of public rights of way and village greens.
<br>
Other speakers include:-
<br>
<ul>
<li>James Atrrill, Chairman of the Agricultural Valuers Associates of Hants, Wilts and Dorset;</li>
<li>Martin Lowry, Chairman of the RICS Countryside Policies Panel;</li>
<li>Angus Burnett, Director at Martin & Company;</li>
<li>Esther Smith, Partner at Thomas Eggar;</li>
<li>Jeremy Barrell, Barrell Tree Consultancy;</li>
<li>Robin Satow, Chairman of the RICS Surrey Local Association;</li>
<li>James Cooper, Stnsted Oark Foundation;</li>
<li>Fenella Collins, Head of Planning at the CLA; and</li>
<li>Tom Bodley, Partner at Batcheller Monkhouse</li>
</ul>

如果有帮助,我可以发布更多post->post_content包含的示例吗?

我已暂时允许访问开发网站,因此您可以看到一些示例[注意 - 链接不再可访问,因为问题已得到解答] -

有关如何解决此问题的任何提示?感谢。

$dom = new DOMDocument();
$dom->loadHTML(apply_filters('the_content', $post->post_content)); // Have tried stripping all tags but <img>, still generates warning
$nodes = $dom->getElementsByTagName('img');
foreach($nodes as $img) :
    $images[] = $img->getAttribute('src');
endforeach;

8 个答案:

答案 0 :(得分:19)

这个正确答案来自@lonesomeday的评论。

我最好的猜测是HTML中的某处有未转义的&符号(&amp;)。这将使解析器认为我们在实体引用中(例如©)。当它到达时,它认为实体已经结束了。然后它意识到它不符合实体的内容,因此它发出警告并以纯文本形式返回内容。

答案 1 :(得分:12)

答案 2 :(得分:1)

在任何位置检查HTML代码中的“&”字符。由于这种情况,我遇到了这个问题。

答案 3 :(得分:0)

我最终使用整洁的方式正确地解决了这个问题

// Configuration
$config = array(
    'indent'         => true,
    'output-xhtml'   => true,
    'wrap'           => 200);

// Tidy to avoid errors during load html
$tidy = new tidy;
$tidy->parseString($bill->bill_text, $config, 'utf8');
$tidy->cleanRepair();

$domDocument = new DOMDocument();
$domDocument->loadHTML(mb_convert_encoding($tidy, 'HTML-ENTITIES', 'UTF-8'));

答案 4 :(得分:0)

对于laravel,

使用{{}}代替{!! !!}

我面对了这个,我设法解决了。

答案 5 :(得分:0)

我发现我的表格标签中存在错误。还有一个额外的</td> 我删除并宾果游戏。

答案 6 :(得分:-1)

我没有上述评论所需的声誉,但在我的案例中使用htmlspecialchars解决了这个问题:

$inputHTML = htmlspecialchars($post->post_content);
$dom = new DOMDocument();
$dom->loadHTML(apply_filters('the_content', $inputHTML)); // Have tried stripping all tags but <img>, still generates warning
$nodes = $dom->getElementsByTagName('img');
foreach($nodes as $img) :
    $images[] = $img->getAttribute('src');
endforeach;

就我的目的而言,我也使用strip_tags($inputHTML, "<strong><em><br>"),因此所有图像标签也被剥离了 - 我不确定这是否会成为问题。

答案 7 :(得分:-6)

只需更换“&amp;”在你的字符串中加上“和”。为所有其他符号执行此操作