OK、次の文字の質問を分離しましょう:
- どのXMLドキュメントでもまったく有効ではありません。
- エスケープする必要があります。
「XMLの無効な文字とは」で@dolmenによって提供された回答は引き続き有効ですが、XML 1.1仕様で更新する必要があります。
1.無効な文字
ここで説明する文字は、XMLドキュメントに挿入できるすべての文字です。
1.1。XML 1.0
使用できる文字のグローバルリストは次のとおりです。
[2] Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */
基本的に、制御文字とUnicodeの範囲外の文字は許可されません。これは、たとえば文字エンティティを呼び出すこと
が禁止されていることも意味します。
1.2。XML 1.1
使用できる文字のグローバルリストは次のとおりです。
[2] Char ::= [#x1-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF] /* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */
[2a] RestrictedChar ::= [#x1-#x8] | [#xB-#xC] | [#xE-#x1F] | [#x7F-#x84] | [#x86-#x9F]
XML勧告のこの改訂では、許可された文字が拡張されたため、制御文字が許可され、Unicode標準の新しい改訂が考慮されていますが、これらの改訂はまだ許可されていません:NUL(x00)、xFFFE、xFFFF ...
ただし、制御文字と未定義のUnicode文字の使用はお勧めしません。
また、すべてのパーサーがこれを常に考慮しているわけではなく、制御文字を含むXMLドキュメントが拒否される場合があることにも注意してください。
2.エスケープする必要がある文字(整形式のドキュメントを取得するため):
<
でエスケープする必要があり<
、タグの始まりであると想定されるため、エンティティ。
&
でエスケープする必要があり&
、始まる実体参照であることを想定しているため、実体
>
でエスケープする必要があります>
エンティティ。これは必須ではありません-コンテキストに依存します-しかし、それを回避することを強くお勧めします。
'
でエスケープする必要がある'
エンティティ-単一引用符内で定義された属性で必須強く、常にそれをエスケープすることをお勧めします。
"
でエスケープする必要がある"
エンティティ-二重引用符で定義された属性で必須強く、常にそれをエスケープすることをお勧めします。