Maison > développement back-end > Golang > Pourquoi « ZgotmplZ » apparaît-il dans la sortie de mon modèle Go et comment puis-je y remédier ?

Pourquoi « ZgotmplZ » apparaît-il dans la sortie de mon modèle Go et comment puis-je y remédier ?

Linda Hamilton
Libérer: 2024-12-25 11:46:42
original
482 Les gens l'ont consulté

Why Does

Problème de sortie de modèle : comprendre "ZgotmplZ"

Lors du rendu HTML à l'aide de modèles Go, vous pouvez rencontrer l'apparence déroutante de "ZgotmplZ" dans votre sortie. Cette valeur obscure provient d'une mesure de sécurité qui détecte le contenu dangereux atteignant certains contextes, tels que CSS ou URL, au moment de l'exécution.

Considérez cet exemple :

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)
}
Copier après la connexion

Ce modèle produira ce qui suit sortie :

<option ZgotmplZ ZgotmplZ >test</option>
Copier après la connexion

La présence de "ZgotmplZ" indique que le contenu dangereux selected="selected" a atteint un contexte CSS. Pour gérer de tels scénarios, vous pouvez ajouter une fonction « safe » et « attr » à la carte des fonctions de votre modèle :

    funcMap := template.FuncMap{
        "attr": func(s string) template.HTMLAttr {
            return template.HTMLAttr(s)
        },
        "safe": func(s string) template.HTML {
            return template.HTML(s)
        },
    }
Copier après la connexion

À l'aide de ces fonctions, vous pouvez modifier votre modèle comme suit :

<option {{.attr | attr}}>test</option>
    {{.html | safe}}
Copier après la connexion

Avec cette modification, le résultat sera :

<option selected="selected">test</option>
<option selected="selected">option</option>
Copier après la connexion

Cette solution garantit que le contenu dangereux est correctement échappé avant d'être inclus dans la sortie. Vous pouvez également envisager de définir des fonctions personnalisées pour convertir les chaînes en d'autres types, tels que template.CSS, template.JS et template.URL, afin d'améliorer la sécurité et de maintenir l'organisation du code.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal