Maison > développement back-end > Golang > Comment empêcher le Marshaler JSON de Go de convertir \'&\' en \'&\' ?

Comment empêcher le Marshaler JSON de Go de convertir \'&\' en \'&\' ?

DDD
Libérer: 2024-12-01 13:09:11
original
1041 Les gens l'ont consulté

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

Comment empêcher JSON de convertir '&' en '&' ?

Scénario de problème

Considérez l'extrait de code suivant :

package principal</p>
<p>importation (</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">"encoding/json"
"fmt"
"log"
"net/http"
Copier après la connexion

)

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, "&")
}
Copier après la connexion

}

func main () {

http.HandleFunc("/", testFunc)
err := http.ListenAndServe(":9090", nil)
if err != nil {
    log.Fatal("ListenAndServe", err)
}
Copier après la connexion

}

Lors de l'exécution de ce code, nous remarquons que l'esperluette ('&') est convertie en & dans la sortie du navigateur et de la console, malgré son affichage prévu sous la forme « & ».

Solution

Dans Go 1.7, une nouvelle option a été introduite pour résoudre ce problème :

func (*Encoder) SetEscapeHTML
Copier après la connexion

Cette fonction nous permet de désactiver l'échappement des entités HTML, notamment '&', '<' et '>'.

Pour implémenter cette solution dans l'exemple de code, nous modifions la fonction testFunc comme suit :

func testFunc(w http.ResponseWriter, r *http. Demande) {</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">...

enc := json.NewEncoder(w)
enc.SetEscapeHTML(false)

...
Copier après la connexion

}

En désactivant l'échappement HTML pour l'encodeur, nous nous assurons que le caractère esperluette est conservé sous la forme '&' dans la sortie JSON, à la fois dans le navigateur et dans la console.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Article précédent:Pourquoi mon navigateur ne stocke-t-il pas les cookies définis par mon serveur Go dans une application React ? Article suivant:Comment garantir une transmission complète des données dans un proxy TCP ?
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Derniers numéros
Rubriques connexes
Plus>
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal