我希望在过滤器内将HTML响应中的特定字符替换为它们相应的HTML实体。这些字符包括<
、>
和&
。由于replaceAll()
会替换所有字符,甚至包括HTML标记中的字符,因此我不能使用该方法。
有什么最好的方法来完成这个任务?
我希望在过滤器内将HTML响应中的特定字符替换为它们相应的HTML实体。这些字符包括<
、>
和&
。由于replaceAll()
会替换所有字符,甚至包括HTML标记中的字符,因此我不能使用该方法。
有什么最好的方法来完成这个任务?
如果您正在使用Java编程语言,您可以尝试使用Apache Commons Lang (遗留版本v2)的 StringEscapeUtils.escapeHtml()
方法。或者使用commons-lang3:StringEscapeUtils.escapeHtml4()
方法。
请注意,这也会将à
转换为à
等符号。
org.apache.commons.lang3
现已被弃用,替代方案是org.apache.commons.text
。 - tigrou如果您正在使用JSTL等技术,您可以使用<c:out value="${myObject.property}"/>
来简单地打印出该值,并且它将自动转义。
属性escapeXml
默认为true
。
escapeXml
- 确定是否应将结果字符串中的字符<,>,&,',"
转换为相应的字符实体代码。默认值为true
。
HtmlUtils.htmlEscape()
方法。由于大多数解决方案引用了已弃用的Apache类,因此我从https://dev59.com/o2445IYBdhLWcg3waplH#16947646中进行了适应。
public class StringUtilities {
public static final String[] HTML_ENTITIES = {"&", "<", ">", "\"", "'", "/"};
public static final String[] HTML_REPLACED = {"&", "<", ">", """, "'", "/"};
public static String escapeHtmlEntities(String text) {
return StringUtils.replaceEach(text, HTML_ENTITIES, HTML_REPLACED);
}
}
注意:这不是一个全面的解决方案(它不具备上下文感知能力,可能过于激进),但我需要一个快速、有效的解决方案。
<
)混合的字符串,那么可能为时已晚。在将字符串data包含在标签内之前,您能否对其进行HTML编码? - Damien_The_Unbeliever