提问人:Julius A 提问时间:7/7/2009 最后编辑:animusonJulius A 更新时间:12/4/2021 访问量:1275659
在 XML 文档中需要转义哪些字符?
What characters do I need to escape in XML documents?
答:
如果您使用适当的类或库,它们将为您进行转义。许多 XML 问题是由字符串串联引起的。
XML 转义字符
只有五个:
" "
' '
< <
> >
& &
转义字符取决于使用特殊字符的位置。
这些示例可以在 W3C 标记验证服务中进行验证。
发短信
安全的方法是转义文本中的所有五个字符。但是,这三个字符 和 不需要在文本中转义:"
'
>
<?xml version="1.0"?>
<valid>"'></valid>
属性
安全的方法是转义属性中的所有五个字符。但是,字符不需要在属性中转义:>
<?xml version="1.0"?>
<valid attribute=">"/>
如果引号为:'
"
<?xml version="1.0"?>
<valid attribute="'"/>
同样,如果引号是:"
'
<?xml version="1.0"?>
<valid attribute='"'/>
评论
所有五个特殊字符都不能在注释中转义:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
CDATA的
CDATA 部分中的所有五个特殊字符都不能转义:
<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>
加工说明
在 XML 处理指令中,所有五个特殊字符都不得转义:
<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>
XML 与 .HTML
HTML 有自己的一组转义码,涵盖了更多的字符。
评论
"
&quot;
也许这会有所帮助:
在 SGML、HTML 和 XML 文档中, 称为字符的逻辑结构 数据和属性值包括 字符序列,其中每个 字符可以直接显现 (表示自身),或者可以是 由一系列字符表示 称为字符引用,其中 有两种类型:数字 字符引用和字符 实体引用。本文列出了 字符实体引用 在 HTML 和 XML 文档中有效。
该文章列出了以下五个预定义的 XML 实体:
quot "
amp &
apos '
lt <
gt >
除了通常的五个字符 [<、>、&、“ 和 '] 之外,我还会转义垂直制表符 (0x0B)。它是有效的 UTF-8,但不是有效的 XML 1.0,甚至许多库(包括高度可移植 (ANSI C) 库 libxml2)都错过了它并静默输出无效的 XML。
根据万维网联合会 (w3C) 的规范,XML 文档中不得以文字形式显示 5 个字符,除非用作标记分隔符或在注释、处理指令或 CDATA 节中。在所有其他情况下,必须使用相应的实体或下表中的数字引用替换这些字符:
Original CharacterXML entity replacementXML numeric replacement
< < <
> > >
" " "
& & &
' ' '
请注意,上述实体也可以在 HTML 中使用,但 ' 除外,它是在 XHTML 1.0 中引入的,未在 HTML 4 中声明。出于这个原因,为了确保向后兼容性,XHTML 规范建议改用 '。
评论
>
]]
]]>
对于标签和属性,转义字符是不同的。
对于标签:
< <
> > (only for compatibility, read below)
& &
对于属性:
" "
' '
从字符数据和标记:
与号字符 (&) 和左尖括号 (<) 不得 以文字形式显示,但用作标记分隔符时除外, 或在注释、处理指令或 CDATA 部分中。如果 在其他地方需要它们,它们必须使用任一数字进行转义 字符引用或字符串 “ & ” 和 “ < ” 分别。右尖括号 (>) 可以使用 字符串 “ > ”,并且必须使用以下任一方式进行转义,以便兼容 “ > ” 或出现在字符串中时的字符引用 “ ]]> “,当该字符串未标记 CDATA 的末尾时 部分。
要允许属性值同时包含单引号和双引号, 撇号或单引号字符 (') 可以表示为” '“,双引号字符 (”) 为 “ ” ”。
评论
仅当它们被处理为字符数据而不是标记时,才需要转义:<
&
节略自:XML、转义
有五个预定义的实体:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
“所有允许的 Unicode 字符都可以用数字字符引用来表示。”例如:
中
大多数控制字符和其他 Unicode 范围都被明确排除在外,这意味着(我认为)它们既不能转义也不能直接出现:
这取决于上下文。对于内容,它是 < 和 &,以及 ]]>(尽管是三个而不是一个字符的字符串)。
对于属性值,它是 <、&、“ 和 '。
对于 CDATA,它是 ]]>。
对一个旧的、常见问题的新的、简化的答案......
简化的 XML 转义(优先排序,100% 完成)
始终(记住 90% 的重要内容)
属性值(9% 重要要记住)
attr="
'
单引号在双引号内是可以的。'
"
attr='
"
双引号在单引号内是可以的。"
'
- 以其他方式转义。
"
"
'
'
深奥(0.1%重要)
评论
]]>
]]>
>
>
]]>
>
公认的答案是不正确的。最好使用库来转义 xml。
正如另一个问题中提到的
“基本上,不允许使用控制字符和Unicode范围之外的字符。这也意味着,例如,调用字符实体是被禁止的。
如果你只转义这五个字符。您可能会遇到类似 发现无效的 XML 字符(Unicode:0xc)
评论
<company>AT&T</company>