私はいくつかの同様の質問を見つけましたが、これまでのところ、誰も私を助けることができませんでした。
HTMLのブロック内のすべての画像の「src」を出力しようとしているので、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;
この正解は@lonesomedayからのコメントから来ています。
私の最善の推測は、HTMLのどこかにエスケープされていないアンパサンド(&)があるということです。これにより、パーサーは、エンティティ参照(©など)にいると見なします。 ;に到達すると、エンティティは終了したと見なされます。次に、エンティティに準拠していないことを認識し、警告を送信してコンテンツをプレーンテキストとして返します。
ここで述べたように
警告:DOMDocument :: loadHTML():htmlParseEntityRef:エンティティに ';'が必要です
あなたが使用することができます:
libxml_use_internal_errors(true);
http://php.net/manual/en/function.libxml-use-internal-errors.php を参照してください
私は最終的にこの問題を正しい方法で解決しました
// 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'));
上記のコメントを残すために必要な評判はありませんが、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>")
も使用しているため、すべての画像タグも削除されます。それ以外の場合に問題が発生するかどうかはわかりません。