删除Freemarker模板

时间:2018-04-11 20:43:09

标签: java html 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 <strong>Strong</strong> Argument")应该导致

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

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

是否有类似remove_html的内容或我需要提供自己的内容? (例如,使用OWASP's java-html-sanitizer。)

2 个答案:

答案 0 :(得分:3)

你可以使用Freemarker内置字符串替换函数和“r”标志来启用正则表达式。

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

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

请注意,如果在正则表达式中使用反斜杠,则必须对其进行转义,如下所示(删除空格的设计示例):

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

答案 1 :(得分:1)

从2.3.28开始没有内置任何内容,所以是的,你必须创建自己的。