Maison > développement back-end > Golang > Pourquoi mon ``?

Pourquoi mon ``?

Susan Sarandon
Libérer: 2024-11-06 21:34:02
original
322 Les gens l'ont consulté

Why is my ``?

Inutile < Échappement dans les modèles HTML : résolu avec text/template

Un problème récent est survenu au sein d'un outil de développement utilisant des modèles pour la génération de fichiers, en particulier des fichiers readmes et des licences. Tout a fonctionné de manière transparente, sauf dans les cas où le < le caractère se transformerait en <. Cependant, le > Le caractère n'est pas affecté.

Pour illustrer le problème, considérez l'extrait de code suivant :

<code class="pawn">#include <{{.Repo}}></code>
Copier après la connexion

Ici, le paramètre Repo aurait dû être inséré comme prévu, ce qui donne :

#include <sometext>
Copier après la connexion
Copier après la connexion

Cependant, le résultat réel était :

#include &amp;lt;sometext>
Copier après la connexion

L'analyse de la documentation n'a fourni aucune explication claire de ce comportement. Cela semblait illogique pour le > caractère pour ne pas être affecté pendant que le caractère < le personnage s'est échappé.

La solution réside dans la compréhension du but de html/template. Il est spécialement conçu pour générer une sortie HTML, fournissant un échappement automatique contextuel pour empêcher l'injection de code. La documentation indique clairement :

html/template sert uniquement à générer une sortie HTML. Il fournit la même interface que le package text/template et doit être utilisé à la place de text/template chaque fois que la sortie est HTML.

Lorsque la sortie n'est pas HTML, comme c'est le cas ici avec un fichier readme, elle est il est plus approprié d'utiliser du texte/modèle. Ce moteur de modèle n'échappe pas aux données, résolvant ainsi le problème de conversion de caractères inutile. En passant à text/template, le résultat attendu a été obtenu :

#include <sometext>
Copier après la connexion
Copier après la connexion

Cette distinction entre html/template et text/template garantit que l'échappement contextuel est appliqué uniquement lorsque cela est nécessaire, empêchant ainsi les conversions de caractères inattendues dans des formats non -Scénarios de sortie HTML.

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 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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal