Rumah >pembangunan bahagian belakang >Golang >Melarikan diri '/' dalam templat
Saya mahu menghantar rentetan seperti "avatars/avatar.png" tetapi apabila saya menghantarnya ke templat saya mendapat pelepasan watak. Jadi saya menulis fungsi yang dihantar ke templat:
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}}
Tetapi saya masih mendapat "undefined function 'unescape'". Adakah unescape tidak ditakrifkan?
"net/url" telah diimport.
unescape tidak ditakrifkan?
Secara teknikal tidak. Anda memang mentakrifkannya, tetapi anda melakukannya terlalu terlambat. Sama ada fungsi ditakrifkan disemak semasa penghuraian, bukan semasa pelaksanaan. Anda ada parseglob
,然后您执行 tpl.func(...)
. Ini bukan perkara biasa.
Sebaliknya lakukan ini:
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")) }
Sila ambil perhatian bahawa melarikan diri ialah ciri selamat yang berlaku bergantung pada konteks anda bekerja dengan data masuk, dan unescape
可能不会帮助您“欺骗”您的方式,因为转义将会完成在 unescape
pada output, bukan pada inputnya.
Dalam erti kata lain, apabila anda melakukan {{unescape .}}
, penghurai boleh menukarnya kepada {{unescape }}
bergantung pada konteks (urlescaper ialah fungsi melarikan diri dalaman). Untuk mengelakkan ini, apabila anda ingin menggunakan {{unescape .}}
时,解析器可能会根据上下文将其转换为 {{unescape . | urlescaper}}
(urlescaper
是一个内部转义函数)。为了避免这种情况,当您想要在模板中逐字使用已知的安全字符串时,您应该使用 输入字符串而不是 unescape
rentetan selamat yang dikenali
. Untuk mendapatkan maklumat lanjut tentang konteks, melarikan diri, menaip rentetan, dsb., baca
dokumentasi pakej🎜, semuanya diterangkan dengan jelas. 🎜Atas ialah kandungan terperinci Melarikan diri '/' dalam templat. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!