我需要在XML文档中转义哪些字符?

*爱你&永不变心* 提交于 2019-12-16 14:27:47

【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>

XML文档中必须转义哪些字符,或者在哪里可以找到这样的列表?


#1楼

除了常见的五个字符[<,>,&,“,'],我还将转义垂直制表符(0x0B)。它是有效的UTF-8,但不是有效的XML 1.0,甚至许多库(包括libxml2)错过它,并以静默方式输出无效的XML。


#2楼

如果您使用适当的类或库,它们将为您进行转义。 许多XML问题是由字符串串联引起的。

XML转义字符

只有五个:

"   &quot;
'   &apos;
<   &lt;
>   &gt;
&   &amp;

转义字符取决于使用特殊字符的位置。

可以在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='"'/>

评论

所有5个特殊字符均不得在注释中转义:

<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>

数据

所有5个特殊字符都不得CDATA部分中转义:

<?xml version="1.0"?>
<valid>
<![CDATA["'<>&]]>
</valid>

加工说明

XML处理指令中不得转义所有5个特殊字符:

<?xml version="1.0"?>
<?process <"'&> ?>
<valid/>

XML与HTML

HTML有其自己的转义码集,可覆盖更多字符。


#3楼

也许这会有所帮助:

XML和HTML字符实体引用列表

在SGML,HTML和XML文档中,称为字符数据和属性值的逻辑结构由字符序列组成,其中每个字符都可以直接表示(代表自己),也可以由一系列称为字符引用的字符表示,其中有两种类型:数字字符引用和字符实体引用。 本文列出了在HTML和XML文档中有效的字符实体引用。

该文章列出了以下五个预定义的XML实体:

quot  "
amp   &
apos  '
lt    <
gt    >

#4楼

根据万维网联盟(w3C) 的规范 ,除了用作标记定界符或用作注释定界符或在注释,处理指令或CDATA部分中使用之外, XML文档中不得有5个字符以其原义形式出现。 。 在所有其他情况下,必须根据下表使用相应的实体或数字引用来替换这些字符:

原始字符 XML实体替换 XML数字替换
< &lt; &#60;
> &gt; &#62;
“&QUOT;&#34;
&&安培; &#38;
' 者; &#39;

注意,上述实体也可以在HTML中使用,除了’。 ,它是随XHTML 1.0引入的,而未在HTML 4中声明。因此,为确保追溯兼容性, XHTML规范建议使用&#39;。 代替。


#5楼

标签和属性的转义字符不同。

对于标签:

 < &lt;
 > &gt; (only for compatibility, read below)
 & &amp;

对于属性:

" &quot;
' &apos;

http://www.w3.org/TR/2008/REC-xml-20081126/#syntax

除用于标记分隔符时,或在注释,处理指令或CDATA节中,“&”字符(&)和左尖括号(<)均不得以其文字形式出现。 如果在其他地方需要它们,则必须分别使用数字字符引用或字符串“&amp;”和“&lt;”对其进行转义。 右尖括号(>)可以用字符串“&gt;”表示,并且为了兼容起见,在内容中出现在字符串“]]>”中时,必须使用“&gt;”或字符引用对其进行转义,当该字符串未标记CDATA节的结尾时。

为了允许属性值同时包含单引号和双引号,撇号或单引号字符(')可以表示为“’”,而双引号字符(”)可以表示为“’”。 ”。

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!