Beim Rendern von HTML mit Go-Vorlagen kann es sein, dass Sie in Ihrer Ausgabe auf das verwirrende Erscheinungsbild von „ZgotmplZ“ stoßen. Dieser undurchsichtige Wert ergibt sich aus einer Sicherheitsmaßnahme, die zur Laufzeit unsichere Inhalte erkennt, die bestimmte Kontexte wie CSS oder URLs erreichen.
Betrachten Sie dieses Beispiel:
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) }
Diese Vorlage erzeugt Folgendes Ausgabe:
<option ZgotmplZ ZgotmplZ >test</option>
Das Vorhandensein von „ZgotmplZ“ zeigt an, dass der unsichere Inhalt selected="selected" einen CSS-Kontext erreicht hat. Um solche Szenarien zu bewältigen, können Sie Ihrer Vorlagenfunktionszuordnung eine „sichere“ und eine „attr“-Funktion hinzufügen:
funcMap := template.FuncMap{ "attr": func(s string) template.HTMLAttr { return template.HTMLAttr(s) }, "safe": func(s string) template.HTML { return template.HTML(s) }, }
Mit diesen Funktionen können Sie Ihre Vorlage wie folgt ändern:
<option {{.attr | attr}}>test</option> {{.html | safe}}
Mit dieser Änderung sieht die Ausgabe wie folgt aus:
<option selected="selected">test</option> <option selected="selected">option</option>
Diese Lösung stellt sicher, dass unsichere Inhalte ordnungsgemäß maskiert werden, bevor sie in die Ausgabe aufgenommen werden. Sie können auch benutzerdefinierte Funktionen definieren, um Zeichenfolgen in andere Typen wie template.CSS, template.JS und template.URL zu konvertieren, um die Sicherheit zu erhöhen und die Codeorganisation aufrechtzuerhalten.
Das obige ist der detaillierte Inhalt vonWarum erscheint „ZgotmplZ' in der Ausgabe meiner Go-Vorlage und wie kann ich das Problem beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!