我想在过滤器中的HTML响应中用它们各自的HTML实体替换某些字符。字符包括<
,>
,&
。我不能使用replaceAll()
,因为它会替换所有字符,即使是那些属于HTML标记的字符。在java中用HTML实体替换字符
这样做的最佳方法是什么?
我想在过滤器中的HTML响应中用它们各自的HTML实体替换某些字符。字符包括<
,>
,&
。我不能使用replaceAll()
,因为它会替换所有字符,即使是那些属于HTML标记的字符。在java中用HTML实体替换字符
这样做的最佳方法是什么?
如果您使用的是诸如JSTL之类的技术,您可以使用<c:out value="${myObject.property}"/>
简单地打印出该值并自动转义。
默认情况下,属性escapeXml
为true
。
escapeXml
- 确定在所产生 字符串中的字符<,>,&,',"
是否应当被转换成其相应的字符实体 代码。默认值是true
。
在应用之前,我无法控制应用程序我作为一个HTML响应 – user1448652
从Java,你可以尝试,阿帕奇共享郎(传统V2)StringEscapeUtils.escapeHtml()
。
或与commons-lang3:StringEscapeUtils.escapeHtml4()
。
请注意,这也将转换à
到à
&这样
这是最好的,恕我直言,最好的解决方案 –
简单,干净,在Groovy中也能很好地工作。 –
另外值得注意的是:如果您已经(已经)使用Web框架,那么很可能已经在框架中构建了类似的功能。例如,Spring有HtmlUtils.htmlEscape(),这里记录:http://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/web/util/HtmlUtils.html – Josh1billion
如果一个字符串已经形成一个包含HTML标签和独立字符的混合,如'<',那么它可能为时已晚。在它被包含在标签中之前,你不能对字符串* data *进行HTML编码吗? –
我的应用程序边界不允许我更早地完成它:( – user1448652
但是,想一想 - 如果它是*可能*完全形成字符串可靠地做到这一点,你不会*需要*做编码 - 网页浏览器会使用无论这个神奇的技术是从一般文本区分标签 –