如何将XML中的&符号转义为HTML中的实体?


522

我有一些XML文本希望在HTML页面中呈现。这段文字包含一个&符号,我想以其实体表示形式呈现&

如何在源XML中转义此“&”号?我试过了&,但这被解码为实际的&字符(&),在HTML中无效

因此,我想以一种&在使用XML输出的网页中进行呈现的方式对其进行转义。


1
在此问题的最新修订版中声称“实际的&字符(&)...在HTML中无效”。是错误的。确实,即使是作为理由提供的链接问题的公认答案也表明“ HTML5允许您使其保持不转义,但仅当其后的数据看起来不像是有效的字符引用时”
Mark Amery

Answers:


422

当您的XML包含时&,这将导致文本&

当您在HTML中使用该代码时,该代码将显示为&


195

根据XML 1.0规范的§2.4,您应该可以使用&

我尝试过 但这是不允许的。

您确定这不是另一个问题吗?XML明确将其定义为逃避&符的方式。


3
发布时,这是完全合理的,但是由于对问题的更改(或澄清),使其看起来似乎毫无意义。一方面,引用的段落不再存在于问题中。
马克·阿默里

132

&字符本身是XML中的转义字符,因此解决方案是将其与Unicode十进制等效项连接起来,&从而确保没有XML解析错误。也就是说,替换字符&&


5
我真的很喜欢这种解决方案!也应该可以使用十六进制表示法:&
CodeManX

2
从逻辑上讲,这为什么行得通?这两个字符串都有一个&符,其中一个在末尾带有字符代码...
sijpkes

4
@sijpkes因为此处的与号告诉解析器以下字符用于表示另一个字符,在这种情况下,该字符将是与号。“&”号在XML中不是“非法”的-只是具有特殊的含义。这意味着“此后直到打分号的所有字符都应翻译成其他字符”。通常情况下,如果您使用与号,而没有描述性字符和后缀分号,解析器就会感到困惑。
Riley Major

1
这就是我的答案。添加& 我的响应标题的位置中的问题已修复,并且在响应标题上未显示“&”号。:D
iamjoshua

堆栈溢出是如此之大。这是一篇将近11年的帖子,可以解决我的问题。它已被浏览超过690,000次。
条例草案

69

使用CDATA标签:

 <![CDATA[
   This is some text with ampersands & other funny characters. >>
 ]]>

4
这是猜测而不是答案。
布赖恩·奥克利

10
可能是个猜测;这是正确的。CDATA标记允许使用原始的“&”号。
昆汀2009年

19
原始帖子从未明确说明在何处使用&,CDATA标记不能用于属性值,而只能用于标记的实际内容,因此我之所以加上了“?”。
scragar's

1
这对于表征xml数据也非常有用,这个答案在许多其他与xml呈现有关的场景中很有用。对我来说,它确实对Camel XML DSL有所帮助,当我需要为主体或某些带有XML数据的标头设置时,Camel XML解析器将忽略CDATA内容,将它们读取为字符流。
否则

1
这正是我需要的答案,因为就我而言,我不确定XML中可能包含哪些字符,因此我需要对该部分中的所有内容进行转义。
马特


11

就我而言,我不得不将其更改为 %26

我需要&在URL中转义。所以&amp;没有为我解决。将进行urlencode函数更改&%26。这样,XML和浏览器URL机制都不会抱怨该URL。


8
是。但是请注意,OP是关于转义XML的。转义URL是另一个问题。当您拥有XML格式的URL或URL中的XML片段时,真正的乐趣就开始了
Oskar Berggren 2013年

6

我已经尝试过&amp,但没有成功。根据Wim的十个Brink的答案,我尝试了&amp; amp;并成功了。

我的一位开发人员建议我使用&#x26; 不管可以渲染多少次,它都有效。


5

&amp; 是在XML文档的大多数部分中表示“与”号的方式。

如果要在HTML中显示XML,则需要首先创建正确编码的XML(这涉及更改&&amp;),然后使用它来创建正确编码的HTML(其涉及再次更改&&amp;)。结果是:

&amp;amp;

有关XML编码的更详尽说明,请参见:

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


4

<xsl:text disable-output-escaping="yes">&amp;&nbsp;</xsl:text> 会成功的


3

如何使用unicode \u0026?适用于我的Android XML文件。如果出现问题,请让我知道。


1
\u通常,转义在XML中没有特殊含义。-1。
马克·阿默里

@MarkAmery是的,它们没有特殊含义,这就是为什么它们如此出色的原因-没什么可解释的,所以也没有错。Java会解释unicode并按照OP的要求显示与号。
Scott Biggs

1
@ScottBiggs OP的问题与Java有什么关系?
菲利普·安德烈·洛林

1
@ScottBiggs所以这是题外话。- 1
菲利普-安德烈·洛林·

1
@ScottBiggs它对您有用,而另一些可能会受益,这一事实是无关紧要的。您的回答对其他所有读者都是无聊的。因为它不处理OP询问的更一般的情况。这不是关于不分享您的成功。这是关于将其保留在其位置。您的贡献可能很有用,但此处未作答。也许作为评论,或者作为对另一个问题的答案(您可以自由创建和回答自己)。
菲利普·安德烈·洛林

0

考虑一下您的XML是否如下所示。

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES<>'GCF'
  <Query>
</Employees>

您不能<>直接使用Direct,因为它会引发错误。在这种情况下,您可以使用&#60;&#62;代替它。

<Employees Id="1" Name="ABC">
  <Query>
    SELECT * FROM EMP WHERE ID=1 AND RES &#60;&#62; 'GCF'
  <Query>
</Employees>

单击此处查看所有代码。


2
我认为,在发布此答案之前的7年中,已经很好地发现了这一点。
miken32 '19
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.