如何在 XML 中转义 & 符号,以便将它们呈现为 HTML 中的实体?
Posted
技术标签:
【中文标题】如何在 XML 中转义 & 符号,以便将它们呈现为 HTML 中的实体?【英文标题】:How do I escape ampersands in XML so they are rendered as entities in HTML? 【发布时间】:2010-11-22 15:32:32 【问题描述】:我有一些希望在 html 页面中呈现的 XML 文本。此文本包含一个 & 符号,我想在其实体表示中呈现它:&
。
如何在源 XML 中转义这个 & 符号?我尝试了&
,但它被解码为实际的与号字符(&
),即invalid in HTML。
所以我想以这样一种方式对其进行转义,使其在使用 XML 输出的网页中呈现为&
。
【问题讨论】:
在此问题的最新版本中声称 “实际的 & 符号 (&) ... 在 HTML 中无效。” 是错误的。事实上,即使是作为理由提供的链接问题的公认答案也表明 “HTML5 允许您不转义,但仅当后面的数据看起来不像有效的字符引用时”。 【参考方案1】:当您的 XML 包含 &
时,这将导致文本 &
。
当您在 HTML 中使用它时,它将呈现为 &
。
【讨论】:
这如何回答这个问题?【参考方案2】:根据§2.4 of the XML 1.0 spec,您应该可以使用&
。
我试过 &但这是不允许的。
你确定这不是一个不同的问题吗? XML 明确将此定义为转义 & 符号的方式。
【讨论】:
这在发布时是完全合理的,但是对问题的更改(或者可能是澄清)使它看起来像一个答案是荒谬的。一方面,引用的段落不再出现在问题中。【参考方案3】:&
字符本身是 XML 中的转义字符,因此解决方案是将它与 &
的 Unicode 十进制等效字符连接起来,从而确保没有 XML 解析错误。也就是说,将字符 &
替换为 &
。
【讨论】:
我真的更喜欢这个解决方案!也应该可以使用十六进制表示法:&
从逻辑上讲,为什么会这样?两个字符串都有一个 & 符号,包括末尾带有字符代码的字符串...
@sijpkes 因为这里的&符号告诉解析器以下字符用于表示另一个字符,在这种情况下是&符号。 & 符号在 XML 中并不是“非法的”——它只是具有特殊含义。这意味着“在您点击分号之前的所有字符都应该被翻译成别的东西”。当你通常有一个&符号,没有描述性字符和尾随分号时,解析器会感到困惑。
这就是我的答案。添加 &在我的响应标头的位置中修复了它,并且没有在响应标头上显示与号。 :D
Stack Overflow 太棒了。这是一篇将近 11 年的帖子,它解决了我的问题。它的浏览量已超过 690,000 次。【参考方案4】:
使用CDATA
标签:
<![CDATA[
This is some text with ampersands & other funny characters. >>
]]>
【讨论】:
这是猜测而非答案。 这可能是一个猜测;这是正确的。 CDATA 标记允许使用原始 & 符号。 原始帖子从未明确说明 & 的使用位置,CDATA 标签不能用于属性值,只能用于标签的实际内容,因此我包含了“?”。 这对于表征 xml 数据也非常有用,并且这个答案在许多其他有关 xml 呈现的场景中很有帮助。对我来说,它在 Camel XML DSL 中确实很有帮助,当我需要使用一些 XML 数据设置正文或某些标头时,Camel XML 解析器会忽略 CDATA 内容,将它们作为字符流读取。没有这个,骆驼引擎会抛出无效的 xml 结构异常 这正是我需要的答案,因为在我的情况下,我不确定 XML 中可能包含哪些字符,所以我需要转义该部分中的所有内容。【参考方案5】:&amp;
应该可以正常工作。 Wikipedia has a list of predefined entities in XML.
【讨论】:
【参考方案6】:就我而言,我必须将其更改为 %26
。
我需要在 URL 中转义 &amp;
。所以&amp;
不适合我。
urlencode 函数将&amp;
更改为%26
。这样,XML 和浏览器 URL 机制都不会抱怨 URL。
【讨论】:
是的。请注意,虽然 OP 是关于在 XML 中转义。在 URL 中转义是一个不同的问题。当您在 XML 中拥有 URL 或在 URL 中拥有 XML 片段时,真正的乐趣就开始了...... urlencode() 在什么环境下? In php?【参考方案7】:我尝试过 &,但没有成功。基于Wim ten Brink's answer,我尝试了 & 并且成功了。
我的一位开发人员建议我使用 &并且无论渲染多少次都有效。
【讨论】:
分号呢?代码格式可用于解决此处的格式问题(但也可以不使用 - 使用“讽刺”格式)。【参考方案8】:&amp;
是在 XML 文档的大多数部分中表示 & 符号的方式。
如果您想在 HTML 中显示 XML,您需要首先创建正确编码的 XML(这涉及将 &amp;
更改为 &amp;
)然后然后使用它来创建正确编码的 HTML(这涉及再次将&amp;
更改为&amp;
)。结果是:
&amp;
有关 XML 编码的更详尽解释,请参阅:
What characters do I need to escape in XML documents?
【讨论】:
【参考方案9】:<xsl:text disable-output-escaping="yes">&amp;&nbsp;</xsl:text>
可以解决问题。
【讨论】:
【参考方案10】:考虑一下您的 XML 是否如下所示。
<Employees Id="1" Name="ABC">
<Query>
SELECT * FROM EMP WHERE ID=1 AND RES<>'GCF'
<Query>
</Employees>
您不能直接使用<>
,因为它会引发错误。在这种情况下,您可以使用&#60;&#62;
代替它。
<Employees Id="1" Name="ABC">
<Query>
SELECT * FROM EMP WHERE ID=1 AND RES <> 'GCF'
<Query>
</Employees>
14.1 How to use special characters in XML 有所有的代码。
【讨论】:
我认为在发布此答案之前的 7 年里,这一领域已经得到了很好的覆盖。以上是关于如何在 XML 中转义 & 符号,以便将它们呈现为 HTML 中的实体?的主要内容,如果未能解决你的问题,请参考以下文章