使用 Go 模板渲染 HTML 时,您可能会在输出中遇到“ZgotmplZ”的令人困惑的外观。这个模糊的值源于一项安全措施,该措施检测运行时到达某些上下文(例如 CSS 或 URL)的不安全内容。
考虑这个示例:
func main() { funcMap := template.FuncMap{ "printSelected": func(s string) string { if s == "test" { return `selected="selected"` } return "" }, "safe": func(s string) template.HTML { return template.HTML(s) }, } template.Must(template.New("Template").Funcs(funcMap).Parse(` <option {{ printSelected "test" }} {{ printSelected "test" | safe }} >test</option> `)).Execute(os.Stdout, nil) }
此模板将生成以下内容输出:
<option ZgotmplZ ZgotmplZ >test</option>
“ZgotmplZ”的存在表明不安全内容selected=“selected”已经到达CSS 语境。为了处理这种情况,您可以在模板函数映射中添加“safe”和“attr”函数:
funcMap := template.FuncMap{ "attr": func(s string) template.HTMLAttr { return template.HTMLAttr(s) }, "safe": func(s string) template.HTML { return template.HTML(s) }, }
使用这些函数,您可以按如下方式修改模板:
<option {{.attr | attr}}>test</option> {{.html | safe}}
通过此修改,输出将是:
<option selected="selected">test</option> <option selected="selected">option</option>
此解决方案可确保不安全内容在包含在 输出。您还可以考虑定义自定义函数将字符串转换为其他类型,例如 template.CSS、template.JS 和 template.URL,以增强安全性并维护代码组织。
以上是为什么'ZgotmplZ”出现在我的 Go 模板输出中,如何修复它?的详细内容。更多信息请关注PHP中文网其他相关文章!