我正在使用一些包含字符串的XML,如:
<;节点>;这是一个字符串</节点>;
我正在传递给节点的一些字符串将具有类似&、、$等:
<;节点>;这是一个字符串&;这也是</节点>;
这是无效的,因为&
我无法在CDATA中包装这些字符串,因为它们需要保持原样。我试图寻找一个字符列表,这些字符如果不在CDATA中,就不能放入XML节点
有人能给我指一个方向,或者给我提供一个非法字符列表吗
好的,让我们把角色的问题分开:
- 在任何XML文档中都是无效的
- 需要逃走
@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范围的字符。
这也意味着调用例如字符实体&#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),xFFFE,xFFFF
但是,不鼓励使用控制字符和未定义的Unicode字符
还可以注意到,所有解析器并不总是考虑到这一点,带有控制字符的XML文档可能会被拒绝
二,。需要转义的字符(以获得格式良好的文档):
<必须用转义(&;lt实体,因为假定它是标记的开头
&必须用转义(&;amp实体,因为假设它是实体引用的开始
>应使用进行转义(&;燃气轮机实体。它不是强制性的——这取决于上下文——但强烈建议您避开它
”应使用进行转义&;载脂蛋白实体——在单引号中定义的属性中为必填项,但强烈建议始终对其进行转义
“应该用一个实体转义——在双引号中定义的属性中是必需的,但强烈建议始终转义它