Maison >développement back-end >Golang >Comment empêcher le Marshaler JSON de Go de convertir \'&\' en \'&\' ?
Considérez l'extrait de code suivant :
package principal</p> <p>importation (</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) }
}
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 « & ».
Dans Go 1.7, une nouvelle option a été introduite pour résoudre ce problème :
func (*Encoder) SetEscapeHTML
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> <pre class="brush:php;toolbar:false">... enc := json.NewEncoder(w) enc.SetEscapeHTML(false) ...
}
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!