#1 楼
如果您使用适当的类或库,它们将为您进行转义。许多XML问题是由字符串连接引起的。XML转义字符
只有五个:
" "
' '
< <
> >
& &
转义字符取决于使用特殊字符的位置。
可以在W3C标记验证服务中验证示例。
文本
安全方法是转义文本中的所有五个字符。但是,不需要在文本中转义三个字符
"
,'
和>
:<?xml version="1.0"?>
<valid>"'></valid>
属性
安全的方法是转义属性中的所有五个字符。但是,不需要在属性中转义
>
字符:如果引号是
'
,则不必在属性中转义"
字符:<?xml version="1.0"?>
<valid attribute=">"/>
同样,如果引号是
"
,则不必在属性中对'
进行转义:/>
所有五个特殊字符都不能在注释中转义:
<?xml version="1.0"?>
<valid attribute="'"/>
CDATA
所有五个特殊字符都不得在CDATA节中转义:
<?xml version="1.0"?>
<valid attribute='"'/>
处理指令
在XML处理指令中不得转义所有五个特殊字符:
<?xml version="1.0"?>
<valid>
<!-- "'<>& -->
</valid>
XML与HTML的对比
评论
@Pacerier,请您不要编写自己的XML / HTML转义代码。使用库函数,否则您肯定会错过特殊情况。
–詹森
2012年3月16日在9:23
从Wikipedia:“所有允许的Unicode字符都可以用数字字符引用表示。”因此,不止5个。
–蒂姆·库珀(Tim Cooper)
2014年8月15日在7:47
#2 楼
也许这会有所帮助:XML和HTML字符实体引用列表:
在SGML,HTML和XML文档中,已知的逻辑结构因为character
数据和属性值由
字符序列组成,其中每个
字符可以直接表示
(代表自身),或者可以用
表示一系列字符
,称为字符引用,其中
有两种类型:数字
字符引用和字符
实体引用。本文列出了
在HTML和XML文档中有效的字符实体引用。
该文章列出了以下五个预定义的XML实体:
quot "
amp &
apos '
lt <
gt >
#3 楼
评论
XML预定义了这五个实体,但绝对没有指定您不能以其字面形式使用这五个字符中的任何一个。 <和&必须在任何地方转义(CDATA除外)。 “和”仅需在属性值中进行转义,并且仅在相应的引号字符相同的情况下才可以进行转义。“>”实际上不必进行转义。
– Shaun McCance
13年8月24日在13:58
如上所述,<>“&'用作标记定界符时或在注释,处理指令或CDATA节中不必转义。即,当您将<>用作XML标记时,请不要转义。注释也是如此(您是否会在XML文件的注释行中转义&?您不需要,如果不是,则XML仍然有效)。 W3C提供的XML。
– Albz
13年10月1日在7:21
如果@ShaunMcCance>在内容中位于]]之后,则必须转义,除非打算将其作为[]]>分隔符的一部分,以指示CDATA节的结尾。
–李D
2014-4-25 17:45
#4 楼
评论
这意味着对于属性,仅需对引号进行转义,但这是对其他三个字符的补充
–ug
18年7月5日在4:46
#5 楼
对旧的常见问题的新的简化答案...简化的XML转义(优先级为100%完整)
(始终要记住90%的重要性)
除非将
<
启动为<
,否则将<
换为<tag/>
。 /> 属性值(9%要记住)
&
&
单引号&
可以放在双引号内。 &entity;
attr="
'
双引号'
可以在单引号内使用。 "
否则将
attr='
替换为"
,将"
替换为'
。注释,CDATA和处理指令(要记住0.9%重要)
"
在注释"
中,没有必须转义的内容,但不允许'
字符串。 '
在CDATA中<!--
不需要进行任何转义,但不允许使用-->
字符串。--
在PI <![CDATA[
内无需进行任何转义,但不允许]]>
字符串。 Esoterica(要记住0.1%重要)
将
]]>
换成<?PITarget
,除非?>
结束了CDATA部分。 (此规则通常适用于字符数据-即使在CDATA部分之外。)评论
谢谢,@ MichaelKay。我已将您对[]]>的有用注释并入其中,但选择将其授权给esoterica,而不是建议始终>>逃脱(您不必知道)。我的目标是使XML转义规则易于记忆并且100%准确。
–kjhughes
18年6月3日在14:01
上面的答案(包括接受的提及一提到所有五个字符)应在属性内转义。您是否参考XML标准来支持您所说的内容,因为从逻辑上看您的答案是正确的?
–罗马苏西
2月7日5:49
@RomanSusi:是的,基于官方XML BNF的传闻,误解或误解,许多其他答案都包含错误或过于笼统(“安全方式...”)。我的答案是(a)100%被W3C XML Recommendation证明是正确的;请参阅有关官方BNF的许多链接参考,以及(b)以简洁,合乎逻辑且易于记忆的方式对这些要求进行组织。
–kjhughes
2月7日13:44
@RomanSusi:“所有五个字符应在属性内转义”的具体说法是草率的指导,我的答案中通过2属性值链接引用了AttValue的官方BNF规则不支持。
–kjhughes
2月7日13:44
#6 楼
除了常见的五个字符[<,>,&,“和'],我还将转义垂直制表符(0x0B),它是有效的UTF-8,但不是有效的XML 1.0,甚至很多库(包括高度可移植的(ANSI C)库libxml2)会丢失它,并以静默方式输出无效的XML。#7 楼
缩写自:XML,转义有五个预定义的实体:
< represents "<"
> represents ">"
& represents "&"
' represents '
" represents "
”所有允许的Unicode字符都可以用数字字符引用表示。”例如:
中
大多数控制字符和其他Unicode范围被明确排除,这意味着(我认为)它们既不能转义也不能直接出现:
XML中的有效字符
#8 楼
这取决于上下文。对于内容,它是<和&,以及]]>(尽管是三个字符串而不是一个字符)。对于属性值,它是<,&,“和'。
对于CDATA,它是]]>。
#9 楼
如果要将<
和&
当作字符数据而不是标记,则只需要转义它们:2.4字符数据和标记
评论
请参阅下面的“简化的XML转义”以获取我从主要资源(W3C可扩展标记语言(XML)1.0(第五版))中摘录的简明易记的指南。