我有一个自由标记模板,在允许使用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 <strong>Strong</strong> Argument</title>
,而不是我想要的。
是否有类似remove_html
的内容或我需要提供自己的内容? (例如,使用OWASP's java-html-sanitizer。)
答案 0 :(得分:3)
你可以使用Freemarker内置字符串替换函数和“r”标志来启用正则表达式。
这是一个简单的正则表达式,可以解决这个问题:
${page_title?replace('<[^>]+>','','r')}
请注意,如果在正则表达式中使用反斜杠,则必须对其进行转义,如下所示(删除空格的设计示例):
${page_title?replace('\\s+','','r')}
答案 1 :(得分:1)
从2.3.28开始没有内置任何内容,所以是的,你必须创建自己的。