【问题标题】:Remove HTML tags in Freemarker Template删除 Freemarker 模板中的 HTML 标签
【发布时间】:2018-09-21 21:01:25
【问题描述】:

我有一个 freemarker 模板,它在允许 HTML 的上下文和不允许 HTML 的上下文中显示相同的字符串。

Freemarker 中是否有一个内置的功能可以让我从字符串中完全删除 HTML 标记?

如下模板(假设有内置remove_html)

<#ftl output_format="HTML"/>
<html>
  <head>
    <title>${page_title?remove_html}</title>
  </head>
  <body>
    <h1>${page_title?no_esc}</h1>
  </body>
</html>

并且模型Collections.singletonMap("page_title", "A &lt;strong&gt;Strong&lt;/strong&gt; Argument")应该导致

<html>
  <head>
    <title>A Strong Argument</title>
  </head>
  <body>
    <h1>A <strong>Strong</strong> Argument</h1>
  </body>
</html>

使用内置的esc 会给我&lt;title&gt;A &amp;lt;strong&amp;gt;Strong&amp;lt;/strong&amp;gt; Argument&lt;/title&gt;,这不是我想要的。

有没有类似remove_html 的东西,还是我需要自己提供? (例如,使用OWASP's java-html-sanitizer。)

【问题讨论】:

  • 我不会在表示层解决这样的问题,而是在业务层解决。在那里,您可以根据主标题创建标题。

标签: java html freemarker


【解决方案1】:

您可以使用带有“r”标志的 Freemarker 内置字符串替换功能来启用正则表达式。

这里有一个简单的正则表达式可以解决问题:

${page_title?replace('<[^>]+>','','r')}

请注意,如果您在正则表达式中使用反斜杠,则必须将其转义,如下所示(删除空格的人为示例):

${page_title?replace('\\s+','','r')}

【讨论】:

    【解决方案2】:

    自 2.3.28 起没有内置任何内容,所以是的,您必须自己创建。

    【讨论】:

      猜你喜欢
      • 2020-12-08
      • 2011-10-25
      • 2011-09-30
      • 1970-01-01
      • 2018-02-11
      • 2013-04-11
      • 2012-10-11
      • 1970-01-01
      • 2011-10-17
      相关资源
      最近更新 更多