php xml 转义字符,转义 - 我需要在XML文档中转义哪些字符?

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

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

9个解决方案

1187 votes

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

XML转义字符

只有五个:

" "

' '

< <

> >

& &

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

可以在W3C标记验证服务中验证这些示例。

文本

安全的方法是在文本中转义所有五个字符,但是,不需要在文本中转义三个字符",'和>:

"'>

属性

安全的方法是转义属性中的所有五个字符,但是,"字符不需要在属性中转义:

如果引号为',则无需在属性中转义"字符:

同样,如果报价为',则无需在属性中转义":

评论

不得在评论中转义所有5个特殊字符:

CDATA

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

&]]>

处理说明

<?process <"'&> ?>

XML与HTML

HTML有自己的一组转义码,涵盖了更多的字符。

Welbog answered 2019-01-14T17:35:50Z

88 votes

也许这会有所帮助:

XML和HTML字符实体引用列表:

在SGML,HTML和XML文档中   逻辑结构称为字符   数据和属性值由   字符序列,其中每个   字符可以直接显示   (代表自己),或者可以   由一系列人物代表   称为字符引用,其中   有两种类型:数字   字符引用和字符   实体参考。 本文列出   字符实体引用它   在HTML和XML文档中有效。

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

quot "

amp &

apos '

lt <

gt >

Andrew Hare answered 2019-01-14T17:36:34Z

67 votes

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

原始的CharacterXML实体replacementXML数字替换

&LT;&安培; LT;&安培;#60;

&GT;&安培; GT;&安培;#62;

“&amp; quot;&amp;#34;

&安培;&放大器;放大器;&安培;#38;

'&安培;者;&安培;#39;

注意,上述实体也可以在HTML中使用,除了与XHTML 1.0一起引入的&amp;,并且未在HTML 4中声明。出于这个原因,并且为了确保逆向兼容性,XHTML规范建议 使用&amp;#39; 代替。

Albz answered 2019-01-14T17:37:44Z

45 votes

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

对于标签:

< <

> > (only for compatibility, read below)

& &

对于属性:

" "

' '

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

&符号(&amp;)和左尖括号(&lt;)不得   以字面形式出现,除非用作标记分隔符,   或在评论,处理指令或CDATA部分内。 如果   它们在别处需要,必须使用数字进行转义   字符引用或字符串“&amp; amp;”和“&amp; lt;”   分别。 可以使用以下来表示右尖括号(&gt;)   字符串“&amp; gt;”,并且为了兼容性,必须使用其中任何一个进行转义   “&amp; gt;”或出现在字符串“]]&gt;中的字符引用   “在内容中,当该字符串未标记CDATA的结尾时   部分。

要允许属性值包含单引号和双引号,   撇号或单引号字符(')可以表示为“  &安培;者; “和双引号字符(”)为“&amp; quot;”。

Peter Bartels answered 2019-01-14T17:38:34Z

19 votes

除了众所周知的五个字符[&lt;,&gt;,&amp;,“,']之外,我还会转义垂直制表符(0x0B)。它是有效的UTF-8,但不是有效的XML 1.0,甚至很多 库(包括libxml2)错过它并静默输出无效的XML。

Charon ME answered 2019-01-14T17:38:56Z

10 votes

一个旧的,常见问题的新的,简化的答案......

简化的XML转义

永远(记住90%重要)

逃脱]]>为]]>除非]]>正在开始一个]]>。

逃脱]]>为]]>除非]]>正在开始一个]]>。

属性值(9%重要值得记住)

]]> ]]>单引号]]>可双引号内.'

]]> ]]>双引号]]>可以在单引号内.'

逃逸]]>为]]>和]]>为'否则。

评论,CDATA和处理说明(重要的是要记住0.9%)

]]>在评论]]>中没有什么必须转义但不允许]]>字符串。

]]>在CDATA ]]>中没有必须转义,但不允许]]>字符串。

]]>在PI ]]>中没有必要转义,但不允许]]>字符串。

Esoterica(0.1%重要记住)

逃逸]]>为]]>,除非]]>结束CDATA部分。

(此规则通常适用于字符数据 - 甚至在CDATA部分之外。)

kjhughes answered 2019-01-14T17:40:53Z

5 votes

摘自:[http://en.wikipedia.org/wiki/XML#Escaping]

有五个预定义的实体:

< represents "

> represents ">"

& represents "&"

' represents '

" represents "

“所有允许的Unicode字符都可以用数字字符引用表示。”例如:

大多数控制字符和其他unicode范围都被明确排除,这意味着(我认为)它们不会出现转义或直接:

[http://en.wikipedia.org/wiki/Valid_characters_in_XML]

Tim Cooper answered 2019-01-14T17:41:41Z

3 votes

这取决于具体情况。 对于内容,它是&lt; 和&amp;,和]]&gt;(虽然字符串为3而不是一个字符)。 对于属性值,它是&lt; 和&amp; 和“和'。对于CDATA,它是]]&gt;。

把友情留在无盐 answered 2019-01-14T17:42:03Z

-3 votes

只有&lt; 和&amp; 如果要处理字符数据而不是标记,则需要进行转义:

[http://www.w3.org/TR/xml11/#syntax]

Questionless answered 2019-01-14T17:42:31Z

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值