XML中的无效字符是什么

我正在使用一些包含字符串的XML,如:

<节点>这是一个字符串&lt/节点>

我正在传递给节点的一些字符串将具有类似&amp、$等:

<节点>这是一个字符串&这也是&lt/节点>

这是无效的,因为&amp

我无法在CDATA中包装这些字符串,因为它们需要保持原样。我试图寻找一个字符列表,这些字符如果不在CDATA中,就不能放入XML节点

有人能给我指一个方向,或者给我提供一个非法字符列表吗

好的,让我们把角色的问题分开:

  1. 在任何XML文档中都是无效的
  2. 需要逃走

@dolmen在“什么是XML中的无效字符”中提供的答案仍然有效,但需要使用XML 1.1规范进行更新

一,。无效字符

这里描述的字符是允许插入到XML文档中的所有字符

1.1。在XML1.0中

  • 参考:参见XML建议1.0,§2.2字符

允许的字符的全局列表为:

[2]字符:=#x9 | xA | xD |[#x20-#xD7FF]|[#xE000-#xffd]|[#x10000-#x10FFFF]/*任何Unicode字符,不包括代理块、FFFE和FFFF*/

基本上,不允许使用控制字符和超出Unicode范围的字符。
这也意味着调用例如字符实体&amp#x3是禁止的

1.2。在XML1.1中

  • 参考:参见XML建议1.1、§2.2字符和1.3 XML 1.1的基本原理和更改列表

允许的字符的全局列表为:

[2]字符::=[#x1-#xD7FF]|[#xE000-#xffd]|[#x10000-#x10FFFF]/*任何Unicode字符,不包括代理块、FFFE和FFFF*/

[2a]限制字符:=[#x1-#x8]|[#xB-#xC]|[#xE-#x1F]|[#x7F-#x84]|[#x86-#x9F]

XML建议的这一版本扩展了允许的字符,因此允许使用控制字符,并考虑了Unicode标准的新版本,但仍然不允许使用这些字符:NUL(x00)xFFFExFFFF

但是,不鼓励使用控制字符和未定义的Unicode字符

还可以注意到,所有解析器并不总是考虑到这一点,带有控制字符的XML文档可能会被拒绝

二,。需要转义的字符(以获得格式良好的文档):

&lt必须用转义(&lt实体,因为假定它是标记的开头

&amp必须用转义(&amp实体,因为假设它是实体引用的开始

&gt应使用进行转义(&燃气轮机实体。它不是强制性的——这取决于上下文——但强烈建议您避开它

应使用进行转义&载脂蛋白实体——在单引号中定义的属性中为必填项,但强烈建议始终对其进行转义

应该用一个实体转义——在双引号中定义的属性中是必需的,但强烈建议始终转义它

发表评论