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) }
Ce modèle produira ce qui suit sortie :
<option ZgotmplZ ZgotmplZ >test</option>
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) }, }
À l'aide de ces fonctions, vous pouvez modifier votre modèle comme suit :
<option {{.attr | attr}}>test</option> {{.html | safe}}
Avec cette modification, le résultat sera :
<option selected="selected">test</option> <option selected="selected">option</option>
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!