首頁 >後端開發 >Golang >為什麼'ZgotmplZ”出現在我的 Go 模板輸出中,如何修復它?

為什麼'ZgotmplZ”出現在我的 Go 模板輸出中,如何修復它?

Linda Hamilton
Linda Hamilton原創
2024-12-25 11:46:42486瀏覽

Why Does

模板輸出問題:理解「ZgotmplZ」

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn