Ich möchte eine Zeichenfolge wie „avatars/avatar.png“ übergeben, aber wenn ich sie an die Vorlage übergebe, erhalte ich Zeichen-Escapezeichen. Also habe ich eine an die Vorlage übergebene Funktion geschrieben:
var tpl *template.Template func init() { tpl = template.Must(template.ParseGlob("1Forum/static/html/*.html")) tpl = tpl.Funcs(template.FuncMap{ "unescape": func(s string) string { unescaped, err := url.PathUnescape(s) if err != nil { return s } return unescaped }, }) } {{unescape .User.Avatar}}
Aber ich bekomme immer noch „undefinierte Funktion ‚unescape‘“. Ist unescape nicht definiert?
"net/url" wurde importiert.
unescape ist nicht definiert?
Technisch gesehen nein. Sie haben es zwar definiert, aber Sie haben es zu spät getan. Ob eine Funktion definiert ist, wird beim Parsing überprüft, nicht während der Ausführung. Du hast parseglob
,然后您执行 tpl.func(...)
. Es ist nicht normal.
Machen Sie stattdessen Folgendes:
func init() { tpl = template.Must(template.New("t").Funcs(template.FuncMap{ "unescape": func(s string) string { unescaped, err := url.PathUnescape(s) if err != nil { return s } return unescaped }, }).ParseGlob("1Forum/static/html/*.html")) }
Bitte beachten Sie, dass es sich bei der Escape-Funktion um eine sichere Funktion handelt, die abhängig vom Kontext, in dem Sie mit den Daten arbeiten, und unescape
可能不会帮助您“欺骗”您的方式,因为转义将会完成在 unescape
bei der Ausgabe und nicht bei deren Eingabe auftritt.
Mit anderen Worten: Wenn Sie {{unescape .}}
ausführen, konvertiert der Parser es je nach Kontext möglicherweise in {{unescape .}}
>urlescaper ist eine interne Escape-Funktion). Um dies zu vermeiden, sollten Sie, wenn Sie eine {{unescape .}}
时,解析器可能会根据上下文将其转换为 {{unescape . | urlescaper}}
(urlescaper
是一个内部转义函数)。为了避免这种情况,当您想要在模板中逐字使用已知的安全字符串时,您应该使用 输入字符串而不是 unescape
bekannte sichere Zeichenfolge
. Weitere Informationen zu Kontext, Escapezeichen, Eingabe von Zeichenfolgen usw. finden Sie in der
Paketdokumentation🎜. Dort ist alles klar erklärt. 🎜Das obige ist der detaillierte Inhalt vonEscapezeichen „/' in Vorlagen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!