3

ユーザーが入力したメッセージを含むタグを持つ XML ドキュメントがあります。不要な文字のエスケープを避けたいと考えています。

以下のリンクによると、厳密に不正な文字は "<" と "&" だけです。

注意: 文字 "<" と "&" のみが XML で厳密に違法です。大なり文字は合法ですが、それを置き換えるのは良い習慣です。

http://www.w3schools.com/xml/xml_syntax.asp

しかし、一部のパーサーでは、シーケンス ]]> で問題が発生しました。これはパーサーの問題によるものですか、それとも XML 標準のどこかで本当に違法と定義されているのでしょうか?

メッセージの例:

<?xml version="1.0" encoding="UTF-8" ?> 
<root>
  <message>&lt;!-- -- -- &lt;![CDATA[&quot;TEST&quot;]]></message>
  <signature>Evil</signature>
</root>

ご覧のとおり、< と & はエスケープされており、このメッセージは C++ tinyxml と Java JAXB によって正常に解析されます。Firefox 20.0.1 と IE 8.0 の両方が教えてくれます

XML 解析エラー: 整形式ではありません

リテラル文字列 ']]>' は、要素コンテンツでは使用できません。

それぞれ。

これは本当に強制された標準的な動作ですか?

編集:もっと検索する必要があったようです, Legally use CDATA in XML . では、Firefox と IE の XML パーサーが壊れているのではないでしょうか?

4

1 に答える 1

3

XML仕様から(強調鉱山):

アンパサンド文字 (&) と左山かっこ (<) は、マークアップ区切り文字として、またはコメント、処理命令、または CDATA セクション内で使用される場合を除き、リテラル形式で表示してはなりません。他の場所で必要な場合は、数字参照または文字列 " &amp;" と " &lt;" をそれぞれ使用してエスケープする必要があります。右山かっこ (>) は、文字列 " " を使用して表すことができ、互換性のために、" " またはコンテンツ内の文字列 " " に表示される文字参照&gt;を使用してエスケープする必要があります。 CDATA セクションの終わり。&gt;]]>

これは、このドキュメントを読み取る XML パーサーが使用する]]>CDATA セクションの末尾をマークするために区切り文字が使用されていない限り、たとえ CDATA のコンテキスト内で発生していなくても、エスケープされなければ正当ではないことを意味します。セクション。

私はブラウザーが内部的に使用する XML パーサーについてよく知りませんが、互換性の理由からこの要件が設けられていることを考えると、あなたの推測は正しいようです。

于 2013-04-19T09:25:38.177 に答える