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

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

DDD
Lepaskan: 2024-12-01 13:09:11
asal
1080 orang telah melayarinya

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

)

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

}

func utama () {

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

}

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

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>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">...

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

...
Salin selepas log masuk

}

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 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
Cadangan popular
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan