質問

私は現在、7年以来ウェブサイトとXMLインターフェイスを開発していますが、これまでに、状況に陥ることはありませんでした。 &gt; のために >. 。これまでのところ、すべての掘削は引用することで処理できました <, &, "' 1人。

誰かが今までに状況に陥ったことがありますか(例えば、SGML処理、ブラウザの問題、XSLTなどに関連していますか)。 &gt;?

アップデート: 私はちょうどチェックしました XML仕様, 、たとえば、セクション2.4の文字データについて:

文字データ

[14]      CharData       ::=      [^<&]* - ([^<&]* ']]>' [^<&]*)

そこでさえ、 > CDATAセクションの終了シーケンスを除いて、特別なものとして言及されていません。

この1つのケース、ここで > 何らかの重要なことは、CDATAセクションの終わりになります。 ]]>, 、しかし、もう一度、あなたがそれを引用するなら、引用(すなわち、文字通りの文字列 ]]&gt;)文字通り出力に着陸する(それは cdata).

役に立ちましたか?

解決

ほとんどすべてのXMLインタープリターがあなたが何を意味するのかを理解するので、絶対にする必要はありません。それでも、あなたがそうするならば、あなたは何の保護なしで特別なキャラクターを使用します。

XMLはすべてセマンティックであり、これは実際にはセマンティックに準拠していません。

あなたの〜について アップデート, 、あなたはこの部分を忘れました:

直角ブラケット(>)は文字列「>」を使用して表現でき、互換性のために、どちらかを使用して逃げる必要があります」 &gt; 「または文字列に表示されるときの文字参照」 ]]> 「コンテンツでは、その文字列がCDATAセクションの終わりをマークしていない場合。

ドキュメントに記載されているユースケースは、次のようなものです。

<xmlmarkup>
]]>
</xmlmarkup>

ここに ]]> 一部は古いSGMLパーサーの問題になる可能性があるため、 しなければならない =に逃げます ]]&gt; 互換性の理由から。

他のヒント

使った 19時間ではありません 厳格なXMLバリデーターを渡す前に。別のケースは、このように、実際にHTML/XMLコンテンツテキスト(属性ではなく)で使用する場合です。 <.

確かに、LAXパーサーはあなたがそれに投げたものをほとんど受け入れますが、XSSを心配しているなら、<あなたの友人です。

更新:逃げる必要がある例があります > Firefoxで:

<?xml version="1.0" encoding="utf-8" ?>
<test>
    ]]>
</test>

確かに、それはまだ孤独を逃れなければならない例ではありません >.

(x)HTMLドキュメントの著者ほどではなく、Webサイトのずさんな書面によるコメントフィールドのユーザーとして、HTMLを挿入するように「提供」します。

あなたがあなたのサイトを正しい方法で行うなら、とにかくあなたのコンテンツをハードコードしないでしょう?だからあなたの電話 htmlentities または、何でも(長い間見ない、PHP)は、あなたのために特別なキャラクターを置き換えることになります。確かに、手動で入力することはありません &gt; しかし、私はあなたがそう措置を講じることを願っています > 自動的に交換されます。

私はあなたが引用する必要がある別の例を考えました > html5(xhtml5ではありません)ドキュメント:引用符なしの属性で必要な場合(これは、もちろん議論することができます)。

<img src=arrow.png alt=&gt;>

XHTMLに相当する必要があります

<img src="arrow.png" alt=">" />

しかし、再び、(?

次のテキストがあると想像してください this is a not a ]]> nice day そして、あなたはそれをCDATAセクションに囲むことにしました <![CDATA[this is a not a ]]> nice day]]>.

それを回避するために(そして、未終端のマークされたセクションを持つSGMLフラグメントの解析を許可するために)、ISO 8879:1986の10.4項はそれを宣言します の発生 ]]> マークされたセクションの外側はエラーです.

また、SGMLのマークされたセクションの時代には、CDATA(XMLのように)だけでなく、RCDATA(エンティティと文字参照のみ)にも使用されていたため、非常に人気がありました。それらの内側)。

たとえば、SGMLでは次のことを書くことができます。

 <!ENTITY %WHATTODO "INCLUDE">
 <![%WHATTODO;[<b>]]&gt;</b>]]>

これは次のとおりです。

 <b>]]&gt;</b>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top