首页 > 后端开发 > Golang > 正文

如何避免 Go 模板中 HTML 和 JSON 的意外转义?

DDD
发布: 2024-11-03 04:17:02
原创
414 人浏览过

How to Avoid Unintended Escaping of HTML and JSON in Go Templates?

在 Go 模板中转义 HTML 和 JSON

在 Go 模板中,正确处理 HTML 和 JSON 以防止意外转义至关重要。考虑以下模板:

<some_html> {{ .SomeOtherHTML }} </some_html>
登录后复制

如果您希望输出只是 ,您可能会遇到特殊字符如 < 的问题。和 & 被转义,导致意外输出:

<some_html> <the_other_html/< </some_html>
登录后复制

HTML 转义解决方案

要防止这种情况,您应该将 HTML 代码作为模板传递。 HTML 类型而不是字符串。 template.HTML 是一种特殊类型,指示 Go 不要转义其内容。例如:

<code class="go">tpl := template.Must(template.New("main").Parse(`{{define "T"}}{{.Html}}{{.String}}{{end}}`))
tplVars := map[string]interface{} {
    "Html": template.HTML("<p>Paragraph</p>"),
    "String": "<p>Paragraph</p>",
}
tpl.ExecuteTemplate(os.Stdout, "T", tplVars)</code>
登录后复制

JSON 转义的解决方案

如果还需要渲染 JSON,则应该使用 json.Marshal 函数将其转换为字节大批。这可以防止 Go 转义 JSON 内容。例如:

<code class="go">jsonBytes, _ := json.Marshal(data)
outputString := string(jsonBytes)</code>
登录后复制

通过遵循这些最佳实践,您可以确保在 Go 模板中正确转义 HTML 和 JSON,从而获得所需的输出,而无需进行意外修改。

以上是如何避免 Go 模板中 HTML 和 JSON 的意外转义?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板