You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

撰写含HTML示例的帮助文章:如何在Freemarker中转义HTML?

在FreeMarker中转义HTML的几种常用方法

嘿,刚好我之前也遇到过类似的需求,FreeMarker里其实有挺多方式来处理HTML转义,避免内容被浏览器解析成实际的HTML元素,下面给你详细说说:

1. 使用?html内建函数(最直接的方式)

这是FreeMarker提供的专门用于HTML转义的内建函数,它会自动把HTML特殊字符(比如<转成&lt;,>转成&gt;)转义。

比如你要转义那段列表HTML,假设你把原始HTML存在变量里:

<#assign rawHtml = "<ol> <li>List item 1</li> <li>List item 2</li> <li>List item 3</li> </ol>">

输出的时候加上?html:

${rawHtml?html}

这样渲染后就会得到你想要的转义结果:&lt;ol&gt; &lt;li&gt;List item 1&lt;/li&gt; &lt;li&gt;List item 2&lt;/li&gt; &lt;li&gt;List item 3&lt;/li&gt; &lt;/ol&gt;

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 03:56:12