PHP が XML ドキュメントを読み取ってエンティティ シンボルに遭遇するとエラーが発生します
たとえば、
中央にこのグリッドのエンティティ シンボルがある場合
種類の警告が報告されます
( ! ) 警告: DOMDocument::load() [domdocument.load]: エンティティ 'nbsp' がファイル内で定義されていません:
次のような XML ドキュメントを読み取ります
$xml = new DOMDocument("1.0 ","UTF-8");
$xml->load('myxml.xml');
------解決策-------- -------------
問題を自分で発見できるのは良いことですが、それが発生することは許可されていないため、どのように解決しますか?
------解決策------------------
PHP マニュアル
より loadXML() を使用してエンティティ参照 ( など) を含む文字列を解析する場合は、それらのエンティティ参照が DOCTYPE 宣言を使用して適切に宣言されていることを確認してください。そうでない場合、loadXML() は文字列を解釈できません。 。 例: <?php $str = <<<XML <?xml バージョン="1.0" エンコーディング="iso-8859-1"?> <div>これは改行禁止のスペースです。</div> XML; $dd1 = 新しい DOMDocument(); $dd1->loadXML($str); echo $dd1->saveXML(); ?> 上記のコードを考慮すると、PHP はエンティティ 'nbsp' が適切に宣言されていないことに関する警告を発行します。また、saveXML() の呼び出しは、元の処理命令の縮小バージョンのみを返します。その他はすべて失われます。 、そしてすべては未宣言のエンティティのせいです。 代わりに、最初にエンティティを明示的に宣言します。 <?php $str = <<<XML <?xml バージョン="1.0" エンコーディング="iso-8859-1"?> <!DOCTYPE ルート [ <!ENTITY nbsp " "> ]> <div>これは改行禁止のスペースです。</div> XML。 $dd2 = 新しい DOMDocument(); $dd2->loadXML($str); echo $dd2->saveXML(); ?> 「nbsp」エンティティが DOCTYPE で定義されているため、PHP は警告を発行しなくなり、文字列は整形式になり、loadXML() はそれを完全に理解します。 同じ方法で外部 DTD への参照を使用することもできます (例: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN") "http://www.w3.org/TR/html4/strict.dtd">)、これは、さまざまなエンティティが存在するさまざまなドキュメントに対してこれを行う必要がある場合に特に重要です。 また、補足として...createEntityReference() によって作成されたエンティティ参照には、この種の明示的な宣言は必要ありません。 <br><font color="#e78608">------解決策----------------------</font><br>おめでとうございます。 ~~<br>ありがとう ZT_king <br><font color="#e78608">------解決策------------------</font><br> < > <div class="clear"> は使用できません</div>