Heim >Backend-Entwicklung >Golang >Escapezeichen „/' in Vorlagen

Escapezeichen „/' in Vorlagen

WBOY
WBOYnach vorne
2024-02-06 09:45:081161Durchsuche

Escapezeichen „/ in Vorlagen

Frageninhalt

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.


Richtige Antwort


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 是一个内部转义函数)。为了避免这种情况,当您想要在模板中逐字使用已知的安全字符串时,您应该使用 输入字符串而不是 unescapebekannte sichere Zeichenfolge

buchstäblich in einer Vorlage verwenden möchten, Enter verwenden string

anstelle von unescape. Siehe

Spielplatzbeispiel

. 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen