Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Mengelakkan HTML dan JSON yang tidak disengajakan melarikan diri dalam Templat Go?

Bagaimana untuk Mengelakkan HTML dan JSON yang tidak disengajakan melarikan diri dalam Templat Go?

DDD
DDDasal
2024-11-03 04:17:02445semak imbas

How to Avoid Unintended Escaping of HTML and JSON in Go Templates?

Melepaskan HTML dan JSON dalam Templat Go

Templat In Go, adalah penting untuk mengendalikan HTML dan JSON dengan betul untuk mengelakkan pelarian yang tidak diingini. Pertimbangkan templat berikut:

<some_html> {{ .SomeOtherHTML }} </some_html>

Jika anda menjangkakan output hanyalah , anda mungkin menghadapi isu di mana aksara khas seperti < dan & dilarikan, menghasilkan output yang tidak dijangka:

<some_html> <the_other_html/< </some_html>

Penyelesaian untuk HTML Melarikan diri

Untuk mengelakkan ini, anda harus lulus kod HTML sebagai templat. Jenis HTML dan bukannya rentetan. template.HTML ialah jenis khas yang mengarahkan Go jangan lari daripada kandungannya. Contohnya:

<code class="go">tpl := template.Must(template.New("main").Parse(`{{define "T"}}{{.Html}}{{.String}}{{end}}`))
tplVars := map[string]interface{} {
    "Html": template.HTML("<p>Paragraph</p>"),
    "String": "<p>Paragraph</p>",
}
tpl.ExecuteTemplate(os.Stdout, "T", tplVars)</code>

Penyelesaian untuk JSON Escaping

Jika anda juga perlu membuat JSON, anda harus menggunakan fungsi json.Marshal untuk menukarnya menjadi bait tatasusunan. Ini menghalang Go daripada melarikan diri daripada kandungan JSON. Contohnya:

<code class="go">jsonBytes, _ := json.Marshal(data)
outputString := string(jsonBytes)</code>

Dengan mengikuti amalan terbaik ini, anda boleh memastikan HTML dan JSON melarikan diri dengan betul dalam templat Go anda, menghasilkan output yang diingini tanpa pengubahsuaian yang tidak diingini.

Atas ialah kandungan terperinci Bagaimana untuk Mengelakkan HTML dan JSON yang tidak disengajakan melarikan diri dalam Templat Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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