20

同様の質問がいくつか見つかりましたが、これまでのところ、私を助けることができたものはありません。

HTMLのブロック内のすべての画像の「src」を出力しようとしているので、DOMDocument(). このメソッドは実際には機能していますが、一部のページで警告が表示され、その理由がわかりません。一部の投稿では、警告を抑制するよう提案されていましたが、警告が生成される理由を知りたいと思っています。

警告: DOMDocument::loadHTML(): htmlParseEntityRef: Entity に名前がありません、行: 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;
4

8 に答える 8

37

この正解は @lonesomeday さんからのコメントです。

私の推測では、HTML のどこかにエスケープされていないアンパサンド (&) があると思います。これにより、パーサーはエンティティ参照 (例: ©) にいると認識します。; になると、エンティティは終了したと見なされます。次に、エンティティに準拠していないことを認識するため、警告を送信し、コンテンツをプレーン テキストとして返します。

于 2013-02-12T12:03:05.503 に答える
22

ここで述べたように

警告: DOMDocument::loadHTML(): htmlParseEntityRef: ';' が必要です エンティティで、

あなたが使用することができます:

libxml_use_internal_errors(true);

http://php.net/manual/en/function.libxml-use-internal-errors.phpを参照してください

于 2014-11-10T22:06:12.673 に答える
0

上記のコメントを残すために必要な評判はありませんが、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>")ため、すべてのイメージタグも削除されています-そうでなければこれが問題になるかどうかはわかりません.

于 2016-06-01T17:02:47.657 に答える
-8

文字列の「&」を「and」に置き換えるだけです。他のすべてのシンボルに対してそれを行います

于 2014-02-06T08:46:42.587 に答える