XML ドキュメントでエスケープする必要がある文字は何ですか? またはそのようなリストはどこにありますか?
10 に答える
適切なクラスまたはライブラリを使用すると、それらがエスケープを実行します。多くのXMLの問題は、文字列の連結によって引き起こされます。
XMLエスケープ文字
5つしかありません:
" "
' '
< <
> >
& &
文字のエスケープは、特殊文字が使用されている場所によって異なります。
例は、W3C MarkupValidationServiceで検証できます。
文章
安全な方法は、テキスト内の5文字すべてをエスケープすることです。ただし、3文字"
で'
あり>
、テキストでエスケープする必要はありません。
<?xml version="1.0"?>
<valid>"'></valid>
属性
安全な方法は、属性の5文字すべてをエスケープすることです。ただし、>
文字を属性でエスケープする必要はありません。
<?xml version="1.0"?>
<valid attribute=">"/>
引用符が次の'
場合、属性で文字をエスケープする必要はありません。"
<?xml version="1.0"?>
<valid attribute="'"/>
同様に、引用符が次"
の場合、属性でエスケープする必要はありません。'
<?xml version="1.0"?>
<valid attribute='"'/>
コメントコメント
コメントで5つの特殊文字すべてをエスケープしてはなりません。
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
CDATA
CDATAセクションでは、 5つの特殊文字すべてをエスケープしてはなりません。
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
処理命令
XML処理命令では、5つの特殊文字すべてをエスケープしてはなりません。
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
XMLとHTML
HTMLには、より多くの文字をカバーする独自のエスケープコードのセットがあります。
おそらくこれは役立つでしょう:
SGML、HTML、およびXMLドキュメントでは、文字データおよび属性値と呼ばれる論理構造は、各文字が直接現れる(それ自体を表す)か、文字参照と呼ばれる一連の文字で表すことができる文字のシーケンスで構成されます。そのうち、数値文字参照と文字エンティティ参照の2つのタイプがあります。この記事では、HTMLおよびXMLドキュメントで有効な文字エンティティ参照を一覧表示します。
この記事には、次の5つの事前定義されたXMLエンティティがリストされています。
quot "
amp &
apos '
lt <
gt >
World Wide Web Consortium (w3C) の仕様によると、マークアップ区切り文字として、またはコメント、処理命令、または CDATA セクション内で使用される場合を除き、XML ドキュメントにリテラル形式で表示してはならない 5 文字があります。 . それ以外の場合はすべて、対応するエンティティまたは次の表に従って数値参照を使用して、これらの文字を置き換える必要があります。
Original CharacterXML entity replacementXML numeric replacement
< < <
> > >
" " "
& & &
' ' '
'を除いて、前述のエンティティは HTML でも使用できることに注意してください。XHTML 1.0 で導入され、HTML 4 では宣言されていません。このため、レトロ互換性を確保するために、XHTML 仕様では ' の使用を推奨しています。代わりは。
一般的に知られている5文字[<、>、&、 "、および']に加えて、垂直タブ文字(0x0B)もエスケープします。これは有効なUTF-8ですが、有効なXML 1.0ではなく、多くのライブラリでさえも有効です。 (移植性の高い(ANSI C)ライブラリlibxml2を含む)それを見逃し、無効なXMLをサイレントに出力します。
要約: XML、エスケープ
次の 5 つの定義済みエンティティがあります。
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
「許可されているすべての Unicode 文字は、数字参照で表すことができます。」例えば:
中
ほとんどの制御文字とその他の Unicode 範囲は明確に除外されています。つまり、(私が思うに) エスケープまたは直接のどちらでも発生することはありません。
それは文脈に依存します。内容については、<と&、および]]>です (ただし、1 文字ではなく 3 文字の文字列です)。
属性値の場合、それは<、&、"、および'です。
CDATA の場合は]]>です。