关于html:escapeXml和escapeHtml有什么区别?

What is the difference between escapeXml and escapeHtml?

我想在JSP页面中转义字符。 escapeXmlescapeHtml哪个更合适?


它们是为不同目的而设计的,HTML具有很多XML所没有的实体。 XML只有5个转义符:

1
2
3
4
5
< represents"<"
> represents">"
& represents"&"
represents '
" represents"

HTML具有负载-请考虑 ©等。这些HTML代码在XML中无效,除非您在标头中包含定义。数字代码(如版权符号的)在这两个方面均有效。


在JSP中没有escapeHtml之类的东西。您通常使用<c:out escapeXml="true">(顺便说一下,它已经默认为true,因此可以省略)或fn:escapeXml()来在JSP中转义HTML。

例如

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

它将以XML实体的形式转义它们,这些实体在纯HTML中也可以很好地工作。它们仅在字面上称为XML实体,因为HTML实体在XML中无效。

也可以看看:

  • Java 5 HTML转义以防止XSS
  • 在Java中转义html


假设您是指Commons StringEscapeUtils,则escapeXml仅处理<>"'&,而escapeHtml涵盖了更丰富的字符集。


因为您正在将HTML发送回使用者,所以我会选择escapeHtml

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