删除 Freemarker 模板中的 HTML 个标签
Remove HTML tags in Freemarker Template
我有一个 freemarker 模板,它在允许 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。)
您可以使用带有 "r" 标志的 Freemarker built-in 字符串替换函数来启用正则表达式。
这是一个简单的正则表达式,可以解决问题:
${page_title?replace('<[^>]+>','','r')}
请注意,如果您在正则表达式中使用反斜杠,则必须对其进行转义,如下所示(删除空格的人为示例):
${page_title?replace('\s+','','r')}
自 2.3.28 起没有内置任何内容,所以是的,您必须自己创建。
我有一个 freemarker 模板,它在允许 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。)
您可以使用带有 "r" 标志的 Freemarker built-in 字符串替换函数来启用正则表达式。
这是一个简单的正则表达式,可以解决问题:
${page_title?replace('<[^>]+>','','r')}
请注意,如果您在正则表达式中使用反斜杠,则必须对其进行转义,如下所示(删除空格的人为示例):
${page_title?replace('\s+','','r')}
自 2.3.28 起没有内置任何内容,所以是的,您必须自己创建。