2012-06-11 87 views
3

我想在过滤器中的HTML响应中用它们各自的HTML实体替换某些字符。字符包括<,>,&。我不能使用replaceAll(),因为它会替换所有字符,即使是那些属于HTML标记的字符。在java中用HTML实体替换字符

这样做的最佳方法是什么?

+0

如果一个字符串已经形成一个包含HTML标签和独立字符的混合,如'<',那么它可能为时已晚。在它被包含在标签中之前,你不能对字符串* data *进行HTML编码吗? –

+0

我的应用程序边界不允许我更早地完成它:( – user1448652

+1

但是,想一想 - 如果它是*可能*完全形成字符串可靠地做到这一点,你不会*需要*做编码 - 网页浏览器会使用无论这个神奇的技术是从一般文本区分标签 –

回答

1

如果您使用的是诸如JSTL之类的技术,您可以使用<c:out value="${myObject.property}"/>简单地打印出该值并自动转义。

默认情况下,属性escapeXmltrue

escapeXml - 确定在所产生 字符串中的字符<,>,&,',"是否应当被转换成其相应的字符实体 代码。默认值是true

http://docs.oracle.com/javaee/5/jstl/1.1/docs/tlddocs/

+0

在应用之前,我无法控制应用程序我作为一个HTML响应 – user1448652

9

从Java,你可以尝试,阿帕奇共享郎(传统V2)StringEscapeUtils.escapeHtml()
或与commons-lang3:StringEscapeUtils.escapeHtml4()

请注意,这也将转换à&agrave; &这样

+0

这是最好的,恕我直言,最好的解决方案 –

+0

简单,干净,在Groovy中也能很好地工作。 –

+2

另外值得注意的是:如果您已经(已经)使用Web框架,那么很可能已经在框架中构建了类似的功能。例如,Spring有HtmlUtils.htmlEscape(),这里记录:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/util/HtmlUtils.html – Josh1billion