Rumah >pembangunan bahagian belakang >Golang >Bagaimana untuk Menghentikan JSON Marshaler Go daripada Menukar \'&\' kepada \'&\'?
Pertimbangkan coretan kod berikut:
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 '&'.
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!