Bedenken Sie den folgenden Codeausschnitt:
package main</p> <p>import (</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><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) }
}
Beim Ausführen dieses Codes stellen wir fest, dass das kaufmännische Und-Zeichen ('&') in & umgewandelt wird. sowohl in der Browser- als auch in der Konsolenausgabe, trotz der beabsichtigten Anzeige als „&“.
In Go 1.7 wurde eine neue Option eingeführt, um dieses Problem zu beheben:
func (*Encoder) SetEscapeHTML
Mit dieser Funktion können wir das Escapezeichen von HTML-Entitäten deaktivieren, einschließlich „&“, „<“ und '>'.
Um diese Lösung im Beispielcode zu implementieren, ändern wir die testFunc-Funktion wie folgt:
func testFunc(w http.ResponseWriter, r *http. Anfrage) {</p> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">... enc := json.NewEncoder(w) enc.SetEscapeHTML(false) ...
}
Indem wir die HTML-Escape-Funktion für den Encoder deaktivieren, stellen wir sicher, dass das kaufmännische Und-Zeichen in der JSON-Ausgabe als „&“ erhalten bleibt. sowohl im Browser als auch in der Konsole.
Das obige ist der detaillierte Inhalt vonWie kann ich verhindern, dass der JSON-Marshaler von Go „&' in „&' konvertiert?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!