PHP が XML ドキュメントを読み取ってエンティティ シンボルに遭遇するとエラーが発生します。問題を解決するにはどうすればよいですか?

WBOY
リリース: 2016-06-13 13:44:10
オリジナル
886 人が閲覧しました

PHP が XML ドキュメントを読み取ってエンティティ シンボルに遭遇するとエラーが発生します
たとえば、
中央にこのグリッドのエンティティ シンボルがある場合
種類の警告が報告されます
( ! ) 警告: DOMDocument::load() [domdocument.load]: エンティティ 'nbsp' がファイル内で定義されていません:

次のような XML ドキュメントを読み取ります
$xml = new DOMDocument("1.0 ","UTF-8");
$xml->load('myxml.xml');

------解決策-------- -------------
問題を自分で発見できるのは良いことですが、それが発生することは許可されていないため、どのように解決しますか?
------解決策------------------
PHP マニュアル

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>
ログイン後にコピー
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!