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

sumber:php.cn
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