如何在JSP中转义特殊的HTML字符?

44

在我创建自定义标签或Java方法之前,如何在JSP中转义HTML字符的标准方式是什么?

我有一个字符串对象,我想将其显示在HTML中,以便用户能够按原样查看。

例如:

String a = "Hello < World";

将成为:

Hello &lt; World
1个回答

60

简短回答:

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:out value="${myString}"/>

还有另一种选择:

<%@taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
${fn:escapeXml(myString)}

10
请注意,转义 XML 和 HTML 之间有所区别。 - Adam Gent
1
如果关注的是HTML中的XSS预防,那么XML转义应该就足够了(这里不想涉及XML与HTML的争议...)。 - Alex Lehmann
@AdamGent:你能举个转义XML和HTML之间的区别的例子吗? - priomsrb
4
是的,那个臭名昭著的 &apos;:在HTML和SGML中,字符实体引用<、>、"和&被预定义,因为小于号、大于号、双引号和&符号已经用于标记分隔。值得注意的是,这不包括XML中的'(')实体。有关所有命名的HTML字符实体引用的列表,请参见XML和HTML字符实体引用列表(约250个条目)。--来自维基百科:http://en.wikipedia.org/wiki/Character_encodings_in_HTML - Adam Gent
3
请注意,这并不能完全防止所有的跨站脚本攻击漏洞!如果你有var show = ${fn:escapeXml(show)},即使没有使用 <",它仍然存在被攻击的风险! - MasterScrat
显示剩余3条评论

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