Je souhaite transmettre une chaîne comme "avatars/avatar.png" mais lorsque je la passe au modèle, j'obtiens des échappements de caractères. J'ai donc écrit une fonction passée au template :
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}}
Mais j'obtiens toujours "fonction non définie 'unescape'". L'évasion n'est-elle pas définie ?
"net/url" a été importé.
unescape n'est pas défini ?
Techniquement non. Vous l'avez défini, mais vous l'avez fait trop tard. Le fait qu'une fonction soit définie est vérifié lors de l'analyse syntaxique, pas lors de l'exécution. Vous avez . Ce n'est pas normal.
parseglob
,然后您执行 tpl.func(...)
Faites plutôt ceci :
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")) }
Veuillez noter que l'échappement est une fonctionnalité
sûre qui se produit en fonction du contexte dans lequel vous travaillez avec les données et de la sortieunescape
可能不会帮助您“欺骗”您的方式,因为转义将会完成在 unescape
, et non de son entrée.
En d'autres termes, lorsque vous faites {{unescape .}}
, l'analyseur peut le convertir en {{urlescaper}>
selon le contexte (urlescaper est une fonction d'échappement interne). Pour éviter cela, lorsque vous souhaitez utiliser une
littéralement dans un modèle, vous devez utiliser Entrée chaîne {{unescape .}}
时,解析器可能会根据上下文将其转换为 {{unescape . | urlescaper}}
(urlescaper
是一个内部转义函数)。为了避免这种情况,当您想要在模板中逐字使用已知的安全字符串时,您应该使用 输入字符串而不是 unescape
au lieu de unescape
.
Voir Exemple de terrain de jeu.
Pour plus d'informations sur le contexte, l'échappement, la saisie de chaînes, etc., lisez la documentation du package, tout est expliqué clairement.
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!