Melarikan diri '/' dalam templat

WBOY
Lepaskan: 2024-02-06 09:45:08
ke hadapan
1036 orang telah melayarinya

Melarikan diri / dalam templat

Kandungan soalan

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}}
Salin selepas log masuk

Tetapi saya masih mendapat "undefined function 'unescape'". Adakah unescape tidak ditakrifkan?

"net/url" telah diimport.


Jawapan betul


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"))
}
Salin selepas log masuk

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

secara literal dalam templat, anda harus menggunakan Enter rentetan

bukannya unescape. Lihat

Contoh Taman Permainan

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

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!