考慮以下代碼片段:
包主<p>導入(</p><pre class="brush:php;toolbar:false">"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 main () {
http.HandleFunc("/", testFunc) err := http.ListenAndServe(":9090", nil) if err != nil { log.Fatal("ListenAndServe", err) }
}
執行此程式碼後,我們注意到與符號('&') 被轉換為&在瀏覽器和控制台輸出中,儘管其預期顯示為“&”。
在Go 1.7 中,引入了一個新選項來解決此問題:
func (*Encoder) SetEscapeHTML
此函數允許我們停用HTML 實體的轉義,包括'&'、''。
為了在範例程式碼中實作此解決方案,我們將 testFunc 函數修改如下:
func testFunc(w http.ResponseWriter, r *http.要求) {<pre class="brush:php;toolbar:false">... enc := json.NewEncoder(w) enc.SetEscapeHTML(false) ...
}
透過停用編碼器的HTML 轉義,我們確保& 字元在JSON 輸出中保留為'&',在瀏覽器和控制台中都可以。
以上是如何阻止 Go 的 JSON 封送拆收器將 '&' 轉換為 '&'?的詳細內容。更多資訊請關注PHP中文網其他相關文章!