IS>これまでに必要ですか?
質問
私は現在、7年以来ウェブサイトとXMLインターフェイスを開発していますが、これまでに、状況に陥ることはありませんでした。 >
のために >
. 。これまでのところ、すべての掘削は引用することで処理できました <
, &
, "
と '
1人。
誰かが今までに状況に陥ったことがありますか(例えば、SGML処理、ブラウザの問題、XSLTなどに関連していますか)。 >
?
アップデート: 私はちょうどチェックしました XML仕様, 、たとえば、セクション2.4の文字データについて:
文字データ
[14] CharData ::= [^<&]* - ([^<&]* ']]>' [^<&]*)
そこでさえ、 >
CDATAセクションの終了シーケンスを除いて、特別なものとして言及されていません。
この1つのケース、ここで >
何らかの重要なことは、CDATAセクションの終わりになります。 ]]>
, 、しかし、もう一度、あなたがそれを引用するなら、引用(すなわち、文字通りの文字列 ]]>
)文字通り出力に着陸する(それは cdata).
解決
ほとんどすべてのXMLインタープリターがあなたが何を意味するのかを理解するので、絶対にする必要はありません。それでも、あなたがそうするならば、あなたは何の保護なしで特別なキャラクターを使用します。
XMLはすべてセマンティックであり、これは実際にはセマンティックに準拠していません。
あなたの〜について アップデート, 、あなたはこの部分を忘れました:
直角ブラケット(>)は文字列「>」を使用して表現でき、互換性のために、どちらかを使用して逃げる必要があります」
>
「または文字列に表示されるときの文字参照」]]>
「コンテンツでは、その文字列がCDATAセクションの終わりをマークしていない場合。
ドキュメントに記載されているユースケースは、次のようなものです。
<xmlmarkup>
]]>
</xmlmarkup>
ここに ]]>
一部は古いSGMLパーサーの問題になる可能性があるため、 しなければならない =に逃げます ]]>
互換性の理由から。
他のヒント
使った 19時間ではありません 厳格なXMLバリデーターを渡す前に。別のケースは、このように、実際にHTML/XMLコンテンツテキスト(属性ではなく)で使用する場合です。 <
.
確かに、LAXパーサーはあなたがそれに投げたものをほとんど受け入れますが、XSSを心配しているなら、<あなたの友人です。
更新:逃げる必要がある例があります >
Firefoxで:
<?xml version="1.0" encoding="utf-8" ?>
<test>
]]>
</test>
確かに、それはまだ孤独を逃れなければならない例ではありません >
.
(x)HTMLドキュメントの著者ほどではなく、Webサイトのずさんな書面によるコメントフィールドのユーザーとして、HTMLを挿入するように「提供」します。
あなたがあなたのサイトを正しい方法で行うなら、とにかくあなたのコンテンツをハードコードしないでしょう?だからあなたの電話 htmlentities
または、何でも(長い間見ない、PHP)は、あなたのために特別なキャラクターを置き換えることになります。確かに、手動で入力することはありません >
しかし、私はあなたがそう措置を講じることを願っています >
自動的に交換されます。
私はあなたが引用する必要がある別の例を考えました >
html5(xhtml5ではありません)ドキュメント:引用符なしの属性で必要な場合(これは、もちろん議論することができます)。
<img src=arrow.png alt=>>
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>]]></b>]]>
これは次のとおりです。
<b>]]></b>