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

Golang模板如何渲染含HTML标签的数据库字段内容?

解决Go模板中HTML内容被转义的问题

你遇到的是Go模板引擎的默认安全机制导致的问题:html/template包会自动转义所有输出的HTML内容,目的是防范XSS攻击,但当你确认内容是安全可信的(比如来自CKEditor生成的、已经过过滤的HTML),可以通过以下两种方式解决:

方法一:后端转换为安全HTML类型

在把查询结果传递给模板前,将CriteriaName字段转换为template.HTML类型(来自html/template包),这个类型会告诉模板引擎:该内容是安全的,无需转义。

修改你的控制器代码:

import "html/template"

func CriteriaReadGET(w http.ResponseWriter, r *http.Request) {
    // ... 你的查询逻辑,获取到result变量 ...
    
    // 将CriteriaName转换为安全HTML类型
    result.CriteriaName = template.HTML(result.CriteriaName)
    
    // 渲染视图
    v := view.New(r)
    v.Name = "criteria/read"
    v.Vars["criteria"] = result
    v.Render(w)
}

之后模板里依然用{{.CriteriaName}}输出,就能正常渲染成列表等HTML格式了。

方法二:模板中使用safeHTML过滤器

如果你不想修改后端代码,也可以直接在模板里使用html/template内置的safeHTML过滤器,它会标记内容为安全HTML并跳过转义:

修改你的模板文件(criteria/read)中的输出语句:

{{.CriteriaName | safeHTML}}

关键安全提示

无论用哪种方法,一定要确保CriteriaName的内容是安全可信的:

  • 如果内容来自用户输入,必须先经过XSS过滤(比如移除<script>等危险标签、限制危险属性)
  • 绝对不要直接渲染未经过滤的用户提交内容,避免XSS攻击风险

内容的提问来源于stack exchange,提问作者Arief Karfianto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:13:57