What is the difference between escapeXml and escapeHtml?
我想在JSP页面中转义字符。 escapeXml或escapeHtml哪个更合适?
它们是为不同目的而设计的,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
-
"在JSP中转义HTML"是指"在EL中转义HTML",对吗?
-
@DavidBala?ic:"使用EL在JSP中转义HTML"。 HTML在EL中无害。
-
我的观点是该函数是EL函数,不能在EL之外使用。请注意,我仅在谈论fn:escapeXml(由于我误读了您的句子,我的第一个评论用词不好)。因此:c:out用于JSP,而fn:escapeXml用于EL(当然,最终也可以用HTML封装)。对困惑感到抱歉。
-
@DavidBala?ic:c:out是使用JSTL在JSP中转义HTML。
假设您是指Commons StringEscapeUtils,则escapeXml仅处理<>"'&,而escapeHtml涵盖了更丰富的字符集。
因为您正在将HTML发送回使用者,所以我会选择escapeHtml。
escapeXml仅支持转义五个基本XML实体(gt,lt,quot,amp,apos),而escapeHtml支持转义所有已知的HTML 4.0实体。
- 您上面的解决方案非常清楚地指出,JSP中没有" escapeHtml之类的东西"。不确定谁在这里正确,但是我绝对需要转义XML和HTML字符,这意味着我确实需要转义HTML。