【问题标题】:Replace characters with HTML entities in Java用 Java 中的 HTML 实体替换字符
【发布时间】:2012-06-14 05:45:08
【问题描述】:

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

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

【问题讨论】:

  • 如果已经形成了一个包含 HTML 标签和独立字符(例如 <)的混合字符串,那么可能为时已晚。您不能在字符串 data 包含在标签中之前对其进行 HTML 编码吗?
  • 我的应用程序边界不允许我早点这样做:(
  • 但请想一想 - 如果 可能 可以使用完全形成的字符串可靠地执行此操作,那么您将不需要 进行编码 - 网络浏览器将使用这种神奇的技术来区分标签和一般文本。
  • 这就是我需要做的。到目前为止,我正在做的是逐个字符地遍历 HTML 字符并检查“”。将其视为标签(忽略属性),我在预定义的标签列表中检查它。如果未找到匹配项,我将同时编码“”。我不认为这是正确的方法......

标签: html jakarta-ee escaping html-entities


【解决方案1】:

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

escapeXml 属性默认为true

escapeXml - 确定结果中的字符 <,>,&,'," 字符串应该被转换成它们对应的字符实体 代码。默认值为true

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

【讨论】:

  • 在应用程序作为 HTML 响应出现之前,我无法控制它。
【解决方案2】:

在 Java 中,您可以尝试 Apache Commons Lang (legacy v2) StringEscapeUtils.escapeHtml()。或者使用 commons-lang3:StringEscapeUtils.escapeHtml4()

请注意,这也会将à 转换为à 等。

【讨论】:

  • 这是最好的,恕我直言,最好的解决方案
  • 简单、干净并且在 Groovy 中也能正常工作。
  • 另外值得注意的是:如果您(已经)在使用 Web 框架,则很有可能已经在框架中内置了类似的功能。例如,Spring 有 HtmlUtils.htmlEscape(),记录在这里:docs.spring.io/spring/docs/current/javadoc-api/org/…
【解决方案3】:

在Spring生态中开发时,可以使用HtmlUtils.htmlEscape()方法。

完整的apidocs,请访问https://docs.spring.io/spring-framework/docs/current/javadoc-api/org/springframework/web/util/HtmlUtils.html

【讨论】:

    猜你喜欢
    • 2023-03-11
    • 2012-12-29
    • 2019-03-20
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-25
    • 1970-01-01
    相关资源
    最近更新 更多