XMLドキュメントでエスケープする必要のある文字は何ですか、またはそのようなリストはどこにありますか?
XMLドキュメントでエスケープする必要のある文字は何ですか、またはそのようなリストはどこにありますか?
回答:
適切なクラスまたはライブラリを使用すると、エスケープが行われます。XMLの問題の多くは、文字列の連結が原因です。
5つしかありません。
" "
' '
< <
> >
& &
エスケープ文字は、特殊文字が使用されている場所によって異なります。
これらの例は、W3Cマークアップ検証サービスで検証できます。
安全な方法は、テキスト内の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セクションでは、5つの特殊文字すべてをエスケープしてはなりません。
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
5つの特殊文字はすべて、XML処理命令でエスケープしてはなりません。
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
HTMLには、より多くの文字をカバーする独自のエスケープコードセットがあります。
"
が変更されます&quot;
おそらくこれは役立つでしょう:
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仕様では&#39;の使用を推奨しています。代わりに。
>
で続く場合はエスケープする必要があります。]]
]]>
エスケープ文字はタグと属性で異なります。
タグの場合:
< <
> > (only for compatibility, read below)
& &
属性の場合:
" "
' '
アンパサンド文字(&)と左山かっこ(<)は、マークアップ区切り文字として、またはコメント、処理命令、またはCDATAセクション内で使用される場合を除いて、リテラル形式で表示しないでください。他の場所で必要な場合は、数字参照または文字列 "&amp;"と "&lt;"を使用してエスケープする必要があります。右山かっこ(>)は、文字列 "&gt;"を使用して表すことができ、互換性のために、コンテンツの文字列 "]]>"に出現する場合、 "&gt;"または文字参照を使用してエスケープする必要があります。その文字列がCDATAセクションの終わりをマークしていない場合。
属性値に一重引用符と二重引用符の両方を含めることができるようにするには、アポストロフィまたは一重引用符( ')を "&apos;"として、二重引用符( ")を"&quot;として表現します。「。
古い、よくある質問に対する新しい簡単な回答...
]]>
としてエスケープする必要があります]]>
。それを達成する最も簡単な方法は、常に>
として脱出することかもしれません>
。
]]>
が、>
常にエスケープすることを提案するのではなく、エスソテリカに委任することを選択しました(ご存知のように、エスケープする必要はありません)。ここでの私の目標は、XMLエスケープルールを簡単に覚えられ 、 100%正確にすることです。
よく知られている5文字[<、>、&、 "、および ']に加えて、垂直タブ文字(0x0B)もエスケープします。これは有効なUTF-8ですが、有効なXML 1.0ではなく、多くのライブラリでも(非常に移植性の高い(ANSI C)ライブラリlibxml2を含む)それを見逃して、無効なXMLを警告なしに出力します。
マークアップではなく文字データとして扱われる場合にのみ<
、&
エスケープする必要があります。
<company>AT&T</company>