Pourquoi mon ``?

Susan Sarandon
Susan Sarandonoriginal
2024-11-06 21:34:02236parcourir

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>

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

#include <sometext>

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

#include &amp;lt;sometext>

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>

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:
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