Maison >développement back-end >Golang >Comment éviter l'échappement involontaire du HTML et du JSON dans les modèles Go ?

Comment éviter l'échappement involontaire du HTML et du JSON dans les modèles Go ?

DDD
DDDoriginal
2024-11-03 04:17:02496parcourir

How to Avoid Unintended Escaping of HTML and JSON in Go Templates?

Échapper le HTML et le JSON dans les modèles Go

Dans les modèles Go, il est essentiel de gérer correctement le HTML et le JSON pour éviter tout échappement involontaire. Considérez le modèle suivant :

<some_html> {{ .SomeOtherHTML }} </some_html>

Si vous vous attendez à ce que le résultat soit simplement , vous pouvez rencontrer le problème où les caractères spéciaux tels que < et & sont échappés, ce qui entraîne une sortie inattendue :

<some_html> <the_other_html/< </some_html>

Solution pour l'échappement HTML

Pour éviter cela, vous devez transmettre le code HTML comme modèle. Tapez HTML au lieu d'une chaîne. template.HTML est un type spécial qui demande à Go de ne pas échapper à son contenu. Par exemple :

<code class="go">tpl := template.Must(template.New("main").Parse(`{{define "T"}}{{.Html}}{{.String}}{{end}}`))
tplVars := map[string]interface{} {
    "Html": template.HTML("<p>Paragraph</p>"),
    "String": "<p>Paragraph</p>",
}
tpl.ExecuteTemplate(os.Stdout, "T", tplVars)</code>

Solution pour l'échappement JSON

Si vous devez également restituer JSON, vous devez utiliser la fonction json.Marshal pour le convertir en octet tableau. Cela empêche Go d'échapper au contenu JSON. Par exemple :

<code class="go">jsonBytes, _ := json.Marshal(data)
outputString := string(jsonBytes)</code>

En suivant ces bonnes pratiques, vous pouvez garantir un échappement correct du HTML et du JSON dans vos modèles Go, ce qui entraîne le résultat souhaité sans modifications involontaires.

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!

Déclaration:
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