Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menghentikan JSON Marshaler Go daripada Menukar \'&\' kepada \'&\'?

Bagaimana untuk Menghentikan JSON Marshaler Go daripada Menukar \'&\' kepada \'&\'?

DDD
DDDasal
2024-12-01 13:09:111000semak imbas

How to Stop Go's JSON Marshaler from Converting '&' to '&'?

Bagaimana untuk Menghalang JSON daripada Menukar '&' kepada '&'?

Senario Masalah

Pertimbangkan coretan kod berikut:

pakej utama

import (

"encoding/json"
"fmt"
"log"
"net/http"

)

func testFunc(w http.ResponseWriter, r *http.Request) {

data := make(map[string]string)
data["key"] = "&"
bytes, err := json.Marshal(data)
if err != nil {
    fmt.Fprintln(w, "generator json error")
} else {
    //print console
    fmt.Println(string(bytes))
    fmt.Println("&")
    //print broswer
    fmt.Fprintln(w, string(bytes))
    fmt.Fprintln(w, "&")
}

}

func utama () {

http.HandleFunc("/", testFunc)
err := http.ListenAndServe(":9090", nil)
if err != nil {
    log.Fatal("ListenAndServe", err)
}

}

Setelah melaksanakan kod ini, kami mendapati bahawa aksara ampersand ('&') sedang ditukar kepada & dalam kedua-dua keluaran penyemak imbas dan konsol, walaupun paparan yang dimaksudkan sebagai '&'.

Penyelesaian

Dalam Go 1.7, pilihan baharu telah diperkenalkan untuk menangani isu ini:

func (*Encoder) SetEscapeHTML

Fungsi ini membolehkan kami melumpuhkan pelepasan entiti HTML, termasuk '&', '<' dan '>'.

Untuk melaksanakan penyelesaian ini dalam kod contoh, kami mengubah suai fungsi testFunc seperti berikut:

func testFunc(w http.ResponseWriter, r *http. Permintaan) {</p>
<pre class="brush:php;toolbar:false">...

enc := json.NewEncoder(w)
enc.SetEscapeHTML(false)

...

}

Dengan melumpuhkan HTML melarikan diri untuk pengekod, kami memastikan bahawa aksara ampersand dikekalkan sebagai '&' dalam output JSON, kedua-duanya dalam penyemak imbas dan konsol.

Atas ialah kandungan terperinci Bagaimana untuk Menghentikan JSON Marshaler Go daripada Menukar \'&\' kepada \'&\'?. 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