escapeXml和escapeHtml有什么区别?

18

我想在JSP页面中转义字符。哪个更适合,escapeXml还是escapeHtml

4个回答

20

它们被设计用于不同的目的,HTML具有许多XML没有的实体。XML只有5个转义字符:

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

尽管HTML有许多特殊字符 - 比如&nbsp;&copy;等等。这些HTML代码在XML中无效,除非你在头部包含定义。数字代码(例如版权符号的&#169;)在两种语言中都是有效的。


1
啊,看到你加了JSP标签,我就知道你是用哪种语言来编写的了。 - Rudu

19

JSP中并不存在escapeHtml。通常你会使用<c:out escapeXml="true">(它默认为true,所以可以省略)或者fn:escapeXml()来转义JSP中的HTML。

例如:

<c:out value="Welcome, ${user.name}" />
<input name="foo" value="${fn:escapeXml(param.foo)}" />

它会将它们转义为XML实体,这在普通HTML中也可以完美地工作。它们之所以被称为XML实体,只是因为HTML实体在XML中无效。

另请参阅:


1
“在JSP中转义HTML”是指“在EL中转义HTML”,对吗? - David Balažic
2
@DavidBalažic:“在JSP中使用EL转义HTML”。HTML在EL中不会造成影响。 - BalusC
我的观点是该函数是EL函数,不能在EL之外使用。请注意,我只谈论fn:escapeXml(我的第一条评论措辞不当,因为我误读了你的句子)。所以:c:out用于JSP,而fn:escapeXml用于EL(当然也可以最终转换为HTML)。对于造成的困惑,我感到很抱歉。 - David Balažic
1
@c:out 是使用 JSTL 在 JSP 中转义 HTML 的方法。 - BalusC

1

由于您要将HTML发送回消费者,因此我建议使用escapeHtml

escapeXml仅支持转义五个基本的XML实体(gt、lt、quot、amp、apos),而escapeHtml支持转义所有已知的HTML 4.0实体


2
你上面的解决方案非常清楚地说明了在JSP中“没有escapeHtml”的概念。不确定谁是正确的,但我肯定需要转义XML和HTML字符,这意味着我确实需要一个转义HTML的方法。 - fIwJlxSzApHEZIl

1
假设您正在引用commons StringEscapeUtils,escapeXml仅处理<>"'&,而escapeHtml则涵盖了更丰富的字符集。

为什么需要覆盖它们?转义这5个字符就足够了。 - David Balažic

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接