Heim > Backend-Entwicklung > Golang > Wie kann ich verhindern, dass der JSON-Marshaler von Go „&' in „&' konvertiert?

Wie kann ich verhindern, dass der JSON-Marshaler von Go „&' in „&' konvertiert?

DDD
Freigeben: 2024-12-01 13:09:11
Original
1042 Leute haben es durchsucht

How to Stop Go's JSON Marshaler from Converting '&' to '&'?

Wie verhindert man, dass JSON „&“ in „&“ konvertiert?

Problemszenario

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"
Nach dem Login kopieren

)

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, "&")
}
Nach dem Login kopieren

}

func main () {

http.HandleFunc("/", testFunc)
err := http.ListenAndServe(":9090", nil)
if err != nil {
    log.Fatal("ListenAndServe", err)
}
Nach dem Login kopieren

}

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 „&“.

Lösung

In Go 1.7 wurde eine neue Option eingeführt, um dieses Problem zu beheben:

func (*Encoder) SetEscapeHTML
Nach dem Login kopieren

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)

...
Nach dem Login kopieren

}

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!

Quelle:php.cn
Vorheriger Artikel:Warum speichert mein Browser keine von meinem Go-Server gesetzten Cookies in einer React-App? Nächster Artikel:Wie kann eine vollständige Datenübertragung in einem TCP-Proxy sichergestellt werden?
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Aktuelle Ausgaben
verwandte Themen
Mehr>
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage