撰写含HTML示例的帮助文章:如何在Freemarker中转义HTML?
在FreeMarker中转义HTML的几种常用方法
嘿,刚好我之前也遇到过类似的需求,FreeMarker里其实有挺多方式来处理HTML转义,避免内容被浏览器解析成实际的HTML元素,下面给你详细说说:
1. 使用?html内建函数(最直接的方式)
这是FreeMarker提供的专门用于HTML转义的内建函数,它会自动把HTML特殊字符(比如<转成<,>转成>)转义。
比如你要转义那段列表HTML,假设你把原始HTML存在变量里:
<#assign rawHtml = "<ol> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ol>">
输出的时候加上?html:
${rawHtml?html}
这样渲染后就会得到你想要的转义结果:<ol> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ol>
2. 使用<#escape>指令(批量转义)
如果你有一段模板内容里的所有插值都需要转义,不用逐个加?html,可以用<#escape>指令包裹这段内容,它会自动对里面的所有插值应用转义规则:
<#escape output as output?html> <!-- 这里面的所有插值都会自动转义 --> ${rawHtml} ${anotherHtmlSnippet} </#escape>
如果某部分内容不需要转义,还可以用?no_esc来临时取消:
<#escape output as output?html> ${rawHtml} <!-- 会被转义 --> ${trustedHtml?no_esc} <!-- 不会被转义,适合你确定安全的内容 --> </#escape>
3. 全局自动转义配置(模板级全局设置)
如果你的整个项目/模板都需要默认自动转义HTML,可以在FreeMarker的配置类里开启全局自动转义:
Configuration cfg = new Configuration(Configuration.VERSION_2_3_32); // 设置全局自动转义 cfg.setAutoEscapingPolicy(AutoEscapingPolicy.ALWAYS);
开启后,所有${...}插值默认都会自动转义,同样可以用?no_esc来跳过特定内容的转义。
额外提示:展示代码块
如果你是想把转义后的HTML作为代码示例展示在页面上,建议用<pre>和<code>标签包裹,这样能保留代码的格式:
<pre><code>${rawHtml?html}</code></pre>
渲染后页面上会以代码块的形式展示转义后的HTML,可读性更好。
内容的提问来源于stack exchange,提问作者Jane
相关产品推荐
相关产品推荐

