使用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中文網其他相關文章!