Command Palette

Search for a command to run...

Décodeur d'encodeur d'entité HTML : échappement, évacuation et arrêt de l'expédition et amp; à la production

Décodeur d'encodeur d'entité HTML : échappement, évacuation et arrêt de l'expédition et amp; à la production

T
Toolz Team
|Jul 11, 2026|25 min read

Vers 2021, un ticket de support WP Adminify a atterri avec une capture d'écran qui me fait toujours grimacer. Un utilisateur avait défini un texte de pied d'administrateur personnalisé, une ligne de droits d'auteur parfaitement innocente avec un © et un lien vers leur agence. Sur leur écran, il est rendu comme © 2021 — Bright & Co. Trois entités visibles, zéro caractères. Le coupable, c'était moi. Ma routine de sauvegarde a échappé au texte, ma routine de rendu s'est de nouveau échappée et quelque part entre un filtre s'est échappée une troisième fois. Au moment où il a touché le navigateur, cette pauvre esperluette avait été échappée quatre fois. J'ai compté.

La solution a pris dix minutes. Le constater a pris deux soirs, car les textes échappés presque D'accord. tu es sure © dans un vidage de base de données et votre cerveau le corrige automatiquement sur ©. J'ai fini par coller des chaînes dans un fichier HTML scratch encore et encore juste pour voir ce que le navigateur afficherait réellement à chaque couche. C'est un flux de travail misérable, et c'est exactement pourquoi un décodeur d'entité HTML est l'un des premiers outils que j'ai intégrés à Toolz.dev.

Le revers de la même pièce est plus effrayant. Quelques mois avant ce ticket, lors d'un examen de code de mon propre plugin, j'ai trouvé un champ de paramètres qui faisait écho à la saisie d'un utilisateur dans un avis d'administrateur sans esc_html(). Toute personne ayant accès à ce champ aurait pu stocker <script> Et l'a fait exécuter pour chaque administrateur qui a chargé la page. XSS stocké, dans mon propre code, un appel de fonction manquant. Personne ne l'a exploité - j'ai eu de la chance. Mais cela a changé de façon permanente ce que je pense à m'échapper : ce n'est pas une tâche de formatage, c'est la frontière entre "Texte" et "code".

Ce guide couvre donc les deux sens. Encodage, donc le texte non fiable conserve le texte. décodage, afin que vous puissiez lire ce que certains pipelines trop désireuses ont mutilés. Et suffisamment de théorie - nommée références VS numériques, les cinq caractères qui comptent réellement, pourquoi l'ordre des opérations provoque une double évasion - pour que vous puissiez déboguer ce genre de choses au lieu de deviner.

tl;dr : Collez votre texte dans le Encoder/décodeur d'entités HTML Toolz.dev Pour convertir entre des caractères bruts et des entités dans les deux sens, nommés, décimaux ou hexadécimaux. Il exécute 100% du côté client, de sorte que le contenu utilisateur et les PII ne quittent jamais votre navigateur. Règle de base : échappez toujours aux cinq spéciaux (& < > " ') en entrée non approuvée et encodage & D'abord ou vous allez échapper à la double.

Principales caractéristiques

Encoder et décoder dans les deux sens

La moitié du temps, je dois tourner <script> dans &lt;script&gt; Il s'affiche donc sous forme de texte dans un article de blog. L'autre moitié, je vais dans le sens inverse - tourner un éraflé &amp;#8217;s Retour dans une apostrophe lisible. L'outil gère les deux. Collez du texte, choisissez Encoder ou décoder, Terminé. Pas de chasse de mode, pas d'outils distincts pour chaque direction. Cela semble insignifiant jusqu'à ce que vous ayez utilisé des outils qui ne décodent que et vous vous retrouvez à ouvrir un deuxième onglet pour encoder un exemple de code pour votre document. Le retour au maximum est également une excellente analyse de santé mentale : encodez, décodez et confirmez que vous récupérez votre chaîne d'origine. Si vous ne le faites pas, quelque chose dans votre entrée était déjà partiellement échappé, ce qui est en soi des informations utiles.

Entités nommées : &amp;amp;, &amp;lt;,&copie; et amis

Les références de caractères nommées sont les références lisibles par l'homme - &amp; Pour &amp;, &lt; pour &lt;, &copy; pour ©, &mdash; Pour un em-dash. L'outil porte une table organisée de 147 noms, pas seulement les cinq célèbres : typographie (&nbsp;, &hellip;, &rsquo;, &ldquo;), la monnaie, les mathématiques et les flèches, les lettres grecques, la gamme complète accentuée latin-1 et quelques cotes comme les costumes de cartes. Cette gamme est ce dont le contenu du monde réel a réellement besoin – WordPress émet &nbsp;, &hellip;, et &rsquo; Grâce à WPtexturize constamment, et un décodeur qui ne connaît qu'une douzaine de noms laisse la moitié de votre texte jonché de références non résolues.

Soyez clair sur ce que 147 n'est pas : la norme HTML WhatWG définit plus de 2 200 références nommées, il s'agit donc d'un sous-ensemble pratique plutôt que du tableau complet. Si un nom n'est pas dedans, le décodage laisse la référence intacte plutôt que de deviner - &bogus; sort comme &bogus;. L'encodage a le comportement complémentaire, et c'est la moitié la plus utile : n'importe quel caractère à l'extérieur Un nom dans le tableau revient automatiquement à une référence numérique décimale, de sorte que rien n'est jamais abandonné en silence. Un emoji encode comme &#127757;, texte chinois comme &#20320;&#22909;. Des noms là où ils existent, des nombres partout ailleurs.

Une autre divergence par rapport au comportement du navigateur à connaître : le décodeur est sensible à la casse et nécessite le point-virgule. Les navigateurs vont résoudre &COPY; Et même un nu &amp Sans un point-virgule de fin dans certains contextes d'analyse, grâce aux règles de compatibilité héritées, ce décodeur ne résout ni l'un ni l'autre. En pratique, c'est très bien - tout ce qui est un outil moderne génère est en minuscule et terminée - mais si vous décodez du HTML d'un ancien CMS, c'est le bord que vous frapperez.

Références numériques : décimale et hexadécimale

N'importe quel caractère Unicode peut être écrit comme une référence de caractère numérique, comme décimal, comme &#8212; ou Hex comme &#x2014; (Les deux sont un em-dash). Le décodeur résout les deux formulaires. Il s'agit de la trappe d'échappement pour les personnages qui n'ont pas de nom dans la norme, et c'est la forme que vous rencontrerez constamment dans les réponses API et les flux RSS, où &#8217; (De citation unique de droite) est pratiquement une signature. Les références hexadécimales correspondent directement aux points de code Unicode — U+2014 &#x2014; — C'est pourquoi je les préfère lorsque je fais des références croisées avec un graphique Unicode.

Limitation honnête, puisque vous le remarquerez dans la minute suivant l'utilisation de l'outil : le numérique encoder Le mode émet uniquement une décimale. Il n'y a pas d'option de sortie hexadécimale. décodage &#x2014; Fonctionne bien, demandant à l'encodeur de le produire. Les deux formes sont sémantiquement identiques à tous les navigateurs, ce qui ne vous coûte rien de fonctionnellement, mais si votre base de code se standardise sur Hex, vous convertirez à la main. C'est sur ma liste. Les références hors de portée se font prendre plutôt que mutilées - &#1114112; est au-dessus du maximum Unicode et renvoie une erreur explicite au lieu d'un caractère de remplacement.

Couverture Unicode complète

Emoji, caractères CJK, arabe, combinant des diacrites, les œuvres. S'il a un point de code, l'outil peut l'exprimer en tant qu'entité et le résoudre. Cela compte plus que vous ne le pensez pour le travail de localisation - j'ai débogué des umlauts allemands &#252; d'un seul fournisseur de traduction et d'un UTF-8 brut ü d'un autre, dans le même fichier d'importation. Un outil qui s'étouffe en dehors du latin-1 est inutile pour cela. Les caractères au-dessus de U+FFFF (emoji vivent là-haut) sont traités correctement comme des points de code uniques, et non des paires de substituts mutimétriques.

Démêlez le texte à double échappatoire

le &amp;amp; Problème. Lorsque deux couches d'un pipeline s'échappent, & se transforme &amp;amp; — et trois couches vous donnent &amp;amp;amp;. Le décodage une fois décollé d'une seule couche, afin que vous puissiez exécuter le décodeur à plusieurs reprises et regarder l'oignon se défaire : &amp;amp;amp;&amp;amp;&amp;&. Compter les passes vous indique combien de couches de votre pile s'échappent, ce qui est précisément le diagnostic dont j'avais besoin lors de ce bug de pied de page Adminify WP à s'échapper à quatre fois. Un décodage par couche. C'est le moyen le plus rapide que je connaisse de localiser où dans un pipeline se produit l'évasion supplémentaire.

Panneaux côte à côte avec nombre de personnages

Entrée à gauche, sortie à droite, les caractères comptent au-dessus des deux. Cette paire de comptes fait plus de travail qu'il n'y paraît : s'échapper est une opération en expansion, donc si vous encodez 40 caractères et que vous obtenez 44 réseaux, exactement un caractère spécial a été touché. Lorsque j'audite si un modèle a déjà échappé à quelque chose, le delta me dit avant d'avoir lu un seul caractère de sortie. Encoder, décoder, échanger et clear sont des boutons - il n'y a pas de conversion de type live-as-you, ce qui, j'admets, est un compromis délibéré que je regrette parfois. Les actions explicites signifient que vous savez toujours quelle direction a produit le texte que vous regardez et avec des bogues qui s'échappent, cette ambiguïté est le problème. Mais pour le piqûre exploratoire, une version à frappe serait vraiment plus agréable.

100% côté client - rien de téléchargé

Tout fonctionne dans votre navigateur. Pas de demande, pas de serveur, pas de journaux. Ce n'est pas un bon moyen : le texte que vous échappez est souvent exactement le texte que vous ne devriez pas coller dans des sites Web aléatoires - des commentaires générés par les utilisateurs avec de vrais noms, des modèles d'e-mail avec des adresses client, du contenu des billets de support. J'ai déjà écrit sur la raison pour laquelle cela est important dans Notre guide de confidentialité des données; la version courte est qu'un convertisseur qui télécharge votre entrée est un processeur de données que vous n'avez jamais vérifié. le Outil d'entité Toolz.dev Fonctionne hors ligne une fois chargé. Le mode avion est un test valide - essayez-le.

Comment utiliser l'encodeur et le décodeur d'entité HTML

Étape 1 : ouvrez l'outil et collez votre texte

se porter toolz.dev/tools/html-entities Et collez votre entrée - un extrait de code, un extrait RSS mutilé, un fragment de modèle d'e-mail, peu importe. Il n'y a pas de plafond de taille qui mérite d'être inquiété pour une utilisation normale ; j'ai collé des journaux de modifications de plugins entièrement rendus. Puisque le traitement est côté client, le contenu sensible est très bien ici.

Étape 2 : Choisissez Encoder ou décoder

L'encodage transforme les caractères bruts en entités (<&lt;) — Utilisez-le lorsque vous souhaitez que le balisage s'affiche sous forme de texte. Le décodage résout les entités en caractères (&amp;&) — Utilisez-le lorsque vous lisez le contenu échappé. Si vous n'êtes pas sûr de l'état de votre texte, décodez d'abord et voyez ce qui change. La sortie inchangée signifie qu'elle était déjà simple.

Étape 3 : Choisissez le style de référence (lorsque l'encodage)

La liste déroulante de mode a exactement trois options, et le choix compte plus qu'il n'y paraît. nommé Encode tout ce pour quoi il a un nom et revient à Decimal pour le reste - lisible dans la source et les diffs, mais il s'échappe également ©, , é Et tous les autres caractères non ASCII, qui gonflent la sortie si vous êtes de toute façon sur UTF-8. numérique fait la même couverture en pure décimale. Caractères spéciaux uniquement ne touche que & < > " ' Et laisse vos accents, vos em-dashes et vos emoji en tant qu'UTF-8 brut - c'est celui que j'utilise pour le contenu réel, et c'est le mode qui correspond à ce que vous utilisez. htmlspecialchars() fait en php. Notez que ' sort toujours comme &#39;, jamais &apos;, dans les trois modes, c'est délibéré, puisque &apos; n'est pas défini dans HTML 4 et les clients de messagerie plus anciens s'étouffent toujours avec.

Étape 4 : Vérifiez la sortie, puis copiez

Appuyez sur Encoder ou décoder et lisez le volet de droite. Pour les tâches de décodage, recherchez spécifiquement les restes &amp; Séquences - Un survivant signifie que le texte a été double échappé, alors appuyez sur Swap et décodez à nouveau. Lorsqu'il lit Clean, copiez le résultat dans votre modèle, votre CMS ou votre code. Pour les travaux de répétition, aller-retour une fois (encoder puis décoder) pour confirmer que rien ne se produise ; avec le mode de caractères spéciaux uniquement, le trajet aller-retour est exact.

entités VS numériques nommées - et les cinq caractères qui comptent réellement

Soyons clairs sur la terminologie, car "entité HTML" est utilisée de manière lâche. Le standard HTML WhatWG - la spécification vivante qui définit la façon dont les navigateurs analysent réellement le HTML - spécifie une table de Références de caractères nommées: plus de 2 200 noms comme &nbsp;, &mdash;, &hellip;, &rarr;, chaque mappage à un ou deux points de code Unicode. séparément, Références de caractères numériques Laissez-vous adresser un point de code directement : décimal (&#8212;) ou hexadécimal (&#x2014;). Même em-dash, trois orthographes.

Voici ma prise d'opinion, aiguisée par des années de travail WordPress : Sur ces 2 200 noms, seuls cinq caractères sont vraiment importants pour l'exactitude et la sécurité. Tout le reste est une typographie et sur une page UTF-8 - qui est chaque page que vous devriez expédier en 2026 - vous pouvez simplement taper le personnage réel. vous n'avez pas besoin &mdash;; vous avez besoin de —. Les cinq qui comptent sont ceux qui ont une signification syntaxique en HTML :

personnage entité Pourquoi c'est important
& &amp; Démarre chaque entité - le caractère d'échappement lui-même
< &lt; Ouvre les balises
> &gt; Ferme les balises
" &quot; Délimite les attributs à double guillemet
' &#39; Délimite les attributs à guillemets uniques

Notez la dernière ligne : &#39;, pas &apos;. le nom &apos; est valable en HTML5, mais cela ne faisait pas partie de HTML4, et les anciens outils (et les anciens clients de messagerie - plus tard) peuvent trébucher dessus. La forme numérique fonctionne partout. C'est le genre de pédanterie qui vous permet d'économiser un rapport de bogue déroutant.

L'ordre des opérations est le jeu entier. Lors de l'encodage, & doit être échappé premier. Si vous vous échappez < à &lt; Et puis échapper aux esperluettes, vous convertirez votre propre sortie en &amp;lt; — Félicitations, vous avez échappé à la double. Le décodage est l'image miroir : &amp; doit être résolu dernier, ou &amp;lt; se transforme &lt; se transforme < Et vous avez sous-décodé (ou pire, réintroduit le majoration en direct à partir d'un texte qui s'est délibérément échappé). Presque tous les bogues d'échappement roulés à la main que j'ai examinés - y compris le mien - sont un bogue de commande.

Le contexte est important, et c'est là que s'échapper rencontre la sécurité. La feuille de triche de prévention des scripts intersites OWASP est brutale à ce sujet : l'encodage des entités HTML est la bonne défense pour le HTML corps et attribuer contextes, mais c'est non Suffisant pour les chaînes de javascript, les URL ou les CSS. &lt; à l'intérieur d' <script> Le block ne décode pas - le contenu du script n'est pas analysé pour les entités - donc l'encodage d'entité n'y est rien utile. Chaque contexte a besoin de son propre encodeur : encodage d'entité pour HTML, \uXXXX s'échapper pour les chaînes JS, pourcentage d'encodage pour les URL (c'est ce que notre Encodeur/décodeur d'URL est pour). L'utilisation du bon encodeur dans le mauvais contexte est la façon classique dont le code d'aspect aseptisé reste exploitable.

Du côté PHP, Connaissez vos deux fonctions. htmlspecialchars() Échappe uniquement aux cinq promotions (passe ENT_QUOTES Ou vous manquez la citation unique - un vrai piège). htmlentities() évasions tout qui a une entité nommée, tournant ü dans &uuml;. Sur les pages UTF-8, htmlentities() est presque toujours le mauvais choix ; il gonfle la sortie et mutile le contenu lorsque les jeux de caractères sont mal déclarés. WordPress enveloppe cela de manière raisonnable :

echo esc_html( $footer_text );              // body context
echo '<a title="' . esc_attr( $title ) . '">'; // attribute context

esc_html() et esc_attr() Les deux échappent aux cinq spéciaux avec les bons drapeaux, choisis par contexte - exactement la discipline à échappée tardive prescrite par l'OWASP. La règle que j'examine dans chaque examen de code : s'échapper à l'heure de sortie, dans le contexte de la sortie, exactement une fois.

Ce qui le ramène à la maison : avec UTF-8, vous besoin Entités pour les caractères typographiques. Vous en avez besoin pour les caractères significatifs du balisage et pour une entrée non fiable. Tout le reste est une habitude héritée.

Cas d'utilisation courants

Affichage des extraits de code dans les articles de blog et les documents

Rédiger un tutoriel contenant <script> ou <?php Et collez-le dans un CMS Raw, et le navigateur essaiera de exécuter ou avaler votre exemple au lieu de l'afficher. Chaque exemple de code dans un contexte HTML a besoin <, >, et & Encodé. Je le fais constamment pour la documentation des plugins - HTML de lecture, articles de la base de connaissances, exemples en ligne dans les onglets d'aide de l'interface utilisateur d'administration. Le workflow : écrivez l'extrait, exécutez-le via le Encodeur d'entité, collez la version échappée à l'intérieur <pre><code>. trente secondes, et votre &lt;script&gt; Affiche comme <script> Au lieu de disparaître dans le DOM. Si vous construisez un flux de travail de Docs en général, notre Guide des outils de codage Couvre le reste de la boîte à outils autour de cela.

Nettoyage du texte à double échappatoire à partir de bases de données et de flux

le &amp;amp; peste. Il apparaît lorsqu'un CMS s'échappe lors de la sauvegarde, un plugin s'échappe sur le rendu et une couche de mise en cache s'échappe une fois de plus. Une fois, j'ai expédié un WP Adminify ChangeLog où l'analyseur de lecture de WordPress.org et mon propre script de build n'étaient pas d'accord quant à savoir qui s'échappait - le changement de journal rendu avait 23 performants. &amp;s dedans avant qu'un utilisateur ne m'envoie par e-mail. Les flux RSS sont pires ; le contenu du flux est souvent échappé au code HTML à l'intérieur XML, donc les consommateurs le sur- ou sous-décode régulièrement. Le correctif est le décodage de diagnostic : collez le texte interrompu, décodez un passage à la fois, comptez le nombre de passes jusqu'à ce qu'il soit propre. Ce nombre est égal au nombre de couches qui s'échappent. Vous savez maintenant combien de morceaux de votre pipeline touchent le texte, et vous pouvez trouver le redondant.

Préparation du contenu généré par les utilisateurs en toute sécurité

Commentaires, texte de révision, BIOS de profil, tickets d'assistance — Tout ce qu'un utilisateur a saisi n'est pas approuvé et contient fréquemment des PII : noms réels, e-mails, adresses. Deux préoccupations se heurtent ici. Premièrement, la sécurité : ce contenu doit être codé en entité à la sortie ou vous n'êtes qu'un <img onerror=...> loin du XSS stocké (demandez-moi le champ des paramètres que j'ai failli expédier). Deuxièmement, la confidentialité : lorsque vous déboguez pourquoi Un utilisateur spécifique de la bio interrompt votre mise en page, vous traitez leurs données personnelles - les coller dans un convertisseur côté serveur signifie expédier PII à un tiers. L'outil Toolz.dev traite tout localement, de sorte que le test de véritables chaînes de problèmes est sûr. Encodez l'exemple, inspectez votre modèle il faut que ont produit, différent de ce qu'il a produit.

Modèles HTML de courrier électronique

Le courrier électronique HTML est un développement Web avec un moteur de rendu de 20 ans. Certains clients gèrent bien les RAW UTF-8, d'autres, selon la façon dont votre ESP transfère les encodages, embellit les caractères typographiques dans MojiBake. La convention défensive de nombreux développeurs de courrier électronique suit encore : encodez la typographie non-ASCII en tant qu'entités (&mdash;, &rsquo;, &nbsp; pour les hacks d'espacement) afin que les octets sur le fil soient de l'ASCII pur. Et rappelez-vous &#39; au-dessus de &apos; — Les moteurs plus anciens d'Outlook sont exactement les outils qui n'ont jamais appris les noms HTML5. Étant donné que les modèles sont personnalisés avec les noms et les adresses des clients, il s'agit encore une fois de contenu que je n'exécuterais que via un outil côté client. Encodez le modèle Chrome une fois, conservez les champs de fusion brutes, échappez-leur au moment de la fusion.

Décodage du contenu racheté et des réponses aux API

Grattez une page ou consommez une API bâclée et vous vous noierez dans &#8217;, &#8220;, &amp;, et &nbsp;. Certaines API renvoient des chaînes codées par une entité dans JSON, un format qui ne nécessite aucun s'échapper du HTML. Vous obtenez donc des artefacts comme "title": "Fish &amp; Chips". Avant que les données ne soient entrées dans votre propre base de données, décodez-la en UTF-8 ; stockez du texte canonique, échappez-vous à la sortie. J'ai frappé constamment ce contenu lors de l'importation de contenu dans les applications Laravel : décoder en premier lieu les entités. à ce moment- Pretty-print et inspectez la charge utile avec le Formateur JSON. Le faire dans l'autre ordre signifie lire JSON où chaque apostrophe comporte sept caractères. Si la charge utile est enveloppée en base64 en plus de cela - certains fournisseurs de webhook le font - le Convertisseur de base64 gère la couche externe, et notre Guide d'encodage Base64 Explique pourquoi cet emballage existe.

Localiser le contenu avec des caractères spéciaux

Les fichiers de traduction arrivent dans chaque état imaginable. Un fournisseur envoie un UTF-8 propre ü; un autre envoie &#252;; un troisième envoie &uuml;; vous obtenez parfois les trois fichiers de bons de commande. Avant d'importer, je normalise tout sur RAW UTF-8 avec un pass Decode - stockage canonique, recherche cohérente, diffs sensés. Il en va de même pour la ponctuation RTL, les crochets CJK et la latin accentué dans les cordes expédiées. Décodez à l'importation, stockez des caractères réels et laissez votre couche de sortie échapper uniquement aux cinq offres spéciales. Vos traducteurs vous remercieront également : &#252;ber N'est-ce pas un mot que quelqu'un devrait avoir à relire.

Nommé VS Decimal VS Hex VS RAW UTF-8 : Lequel utiliser ?

se former Exemple (em-dash) lisibilité Prise en charge du navigateur Quand utiliser
Entité nommée &mdash; Bon — auto-descriptif Universel pour les noms de l'ère HTML4 ; noms HTML5 uniquement (comme &apos;) échouer dans les anciens outils Les cinq spéciaux, les contextes hérités comme le courrier électronique HTML
Référence décimale &#8212; Pauvre - c'est un certain nombre Universel, y compris les analyseurs anciens caractères sans noms, s'échapper de la compatibilité maximale (&#39;)
référence hexagonale &#x2014; Mauvais, mais correspond aux points de code Unicode Universel dans tout ce qui est moderne Lors du croisement des graphiques Unicode ou des spécifications
UTF brut-8 parfaire Universel sur les pages UTF-8 correctement déclarées Tout typographique - cela devrait être votre défaut

Ma position, clairement : Écrivez RAW UTF-8 pour la typographie, réservez des entités pour les cinq offres spéciales et les entrées non approuvées. Un document plein de &mdash; et &hellip; est un document que personne ne peut relire, et il signale un flux de travail qui n'a pas fait confiance à ses déclarations de caractères depuis 2008. Les piles modernes - WordPress, Laravel, Next.js, toutes les bases de données que vous choisiriez aujourd'hui - sont de bout en bout d'UTF-8. Tapez le caractère réel.

Où les entités gagnent leur donjon : &amp;, &lt;, &gt;, &quot;, et &#39; Pour tout ce qui pourrait être interprété comme un balisage, toujours, sans exception, appliqué au moment de la sortie. Et dans les environnements de rendu hostiles - clients de messagerie, flux consommés par des analyseurs inconnus - les références numériques sont le choix paranoïaque mais justifié car ils sont antérieurs à chaque argument de compatibilité. Entre décimale et hexagone, c'est le goût ; je penche Hex parce que &#x2014; Correspond à U+2014 et je peux arrêter de faire des conversions de base dans ma tête.

Questions fréquentes

Qu'est-ce qu'une entité HTML ?

Une entité HTML est une séquence de texte qui représente un caractère au lieu d'écrire directement le caractère. Cela commence par une esperluette et se termine par un point-virgule. Il existe des références nommées comme &Amp; et &copy;, et des références numériques comme &#169; (décimal) ou &#xa9; (hex) qui pointent un point de code Unicode. Les navigateurs les résolvent lors de l'analyse, donc &lt; s'affiche comme un signe moins que au lieu d'ouvrir une balise. Ils existent pour que vous puissiez afficher des caractères qui seraient autrement interprétés comme un balisage.

Quels caractères doivent être échappés en HTML ?

Cinq : L'esperluette, moins que, supérieure à, double citation et citation unique - écrite comme &amp;, &lt;, &gt;, &quot;, et &quot;. esperluette, car il démarre des entités, les crochets d'angle, car ils délimitent les balises, les guillemets, car ils délimitent les valeurs d'attribut. Dans le texte du corps d'élément, vous pouvez vous en sortir avec les trois premiers, mais échapper aux cinq partout est l'habitude qui ne vous mord jamais. Tout le reste - accents, tirets, emoji - peut être RAW UTF-8 sur une page correctement déclarée.

Quelle est la différence entre &lt; écrit comme une entité nommée et &#60;?

Rien, une fois que le navigateur les analyse, les deux produisent un signe moins que. Le formulaire nommé est une recherche dans la table de références nommées WhatWG Standard; "adresses unicode au point 60 directement, et &#x3c; est le même point de code en hexadépan). Les entités nommées sont plus faciles à lire pour les humains ; les références numériques fonctionnent pour tous les caractères, dont des milliers n'ont pas de nom. Pour les promotions courantes, choisissez celle que votre équipe trouve la plus lisible, les navigateurs ne s'en soucient pas.

Pourquoi ma page affiche-t-elle une amp; au lieu d'une esperluette ?

Double évasion. Une couche de votre pile a échappé à une chaîne déjà échappée, tournant &amp; en &amp;amp;. Le navigateur décode un niveau et affiche les restes. Cela signifie généralement que deux composants pensent que s'échapper est leur travail - un CMS sur Save plus un modèle sur le rendu est la paire classique. Décoder la chaîne un passage à la fois dans un décodeur ; le nombre de passes jusqu'à ce qu'il soit lu est égal au nombre de couches qui s'échappent. Faites alors exactement une couche responsable, au moment de la sortie.

L'évasion HTML empêche-t-elle XSS ?

Dans les contextes de corps et d'attributs HTML, oui, encodage d'entités non approuvés, il y a la défense de base, car la charge utile est rendue sous forme de texte inerte. Mais ce n'est pas suffisant partout. La feuille de triche OWASP XSS Prevention est explicite que les chaînes JavaScript, les URL et les CSS ont chacun besoin de leur propre encodage spécifique au contexte ; l'encodage d'entité dans un bloc de script ne fait rien. Escape at Output, dans le contexte dans lequel vous produisez, en utilisant l'encodeur de ce contexte. L'encodage d'entité est un outil de ce kit, pas l'ensemble du kit.

Quelle est la différence entre HTMLSpecialChars et HTMLEntities dans PHP ?

HtmlSpecialChars() échappe uniquement aux caractères significatifs du balisage - et vous devez passer ENT_QUOTES afin qu'il couvre le devis unique. HtmlEnities() convertit chaque caractère qui a une entité nommée, de sorte que les lettres accentuées deviennent des éléments comme la référence UUML. Sur les pages UTF-8, htmlSpecialChars() est presque toujours ce que vous voulez ; HtmlEnities() bloats sort et provoque MojiBake lorsque les jeux de caractères sont mal configurés. Les développeurs WordPress évitent la question en utilisant ESC_HTML() et ESC_ATTR(), qui appliquent les bons indicateurs par contexte.

Dois-je utiliser l'entité nommée Apos pour les apostrophes ?

Préférez &#39;. Le nom de l'apos est valide en HTML5 mais n'a jamais fait partie de HTML4, de sorte que les analyseurs plus anciens - y compris les moteurs de rendu à l'intérieur de certains clients de messagerie - ne le reconnaissent pas et l'afficheront littéralement. La forme numérique, " signifie le même caractère et fonctionne dans tout ce qui a été livré. C'est un choix laid mais sûr, qui est généralement le bon compromis pour s'échapper. Si vous savez que votre sortie ne frappe que les navigateurs modernes, les APOS sont corrects ; les modèles d'e-mail sont exactement là où vous ne pouvez pas le savoir.

Est-il sûr de coller des données utilisateur dans un convertisseur d'entités en ligne ?

Uniquement si l'outil traite du texte dans votre navigateur. Les modèles de contenu et d'e-mail générés par les utilisateurs contiennent régulièrement des noms, des e-mails et d'autres PII, ainsi qu'un convertisseur qui publie votre entrée sur un serveur, vient de recevoir ces données sans accord. L'encodeur/décodeur d'entités HTML de Toolz.dev exécute 100 % du côté client - pas de téléchargement, pas de journalisation et cela fonctionne hors ligne une fois la page chargée. Si vous ne pouvez pas vérifier la manière dont un outil gère les entrées, n'y collez pas de données de production.

Évadez-vous une fois, au bon endroit

Si vous prenez une chose d'une décennie de mes erreurs de fuite, prenez ceci : exactement une couche de votre pile devrait s'échapper, et cela devrait être la couche de sortie. Rangez l'UTF-8 propre. Échappez aux cinq spéciaux au moment du rendu, dans le contexte dans lequel vous vous rendez compte. chaque &amp;amp; En production, il y a une carte de deux composants qui se disputent ce travail - et chaque chaîne d'utilisateur non échappée est un XSS stocké en attente d'une révision de code qui pourrait ne pas se produire. Le mien a failli ne l'a pas fait.

Gardez le Encodeur/décodeur d'entités HTML Dans votre rotation de débogage à côté de ses frères et sœurs - le Encodeur/décodeur d'URL Pour les contextes de codage en pourcentage (le Guide d'encodage des URL Parcoure %2520, le pourcentage de cousine d'encodage de &amp;amp;), le Convertisseur de base64 pour les charges utiles emballées, et Convertisseur de boîtier Pour l'identifiant-renommer le travail de grognement entre eux. le Guide des outils de codage Parcoure tout le set.

Et puisque les chaînes que vous débogez sont si souvent le nom ou le courrier électronique de quelqu'un : tout ce qui est ci-dessus s'exécute côté client, rien de téléchargé, vérifiable dans votre onglet réseau. Ce n'est pas du marketing - c'est la raison pour laquelle j'ai construit ces outils comme je l'ai fait. Plus d'informations sur cette philosophie dans le Guide de confidentialité des données.

Frequently Asked Questions

An HTML entity is a text sequence that represents a character instead of writing the character directly. It starts with an ampersand and ends with a semicolon. There are named references like &amp; and &copy;, and numeric references like &#169; (decimal) or &#xA9; (hex) that point at a Unicode code point. Browsers resolve them while parsing, so &lt; displays as a less-than sign instead of opening a tag. They exist so you can show characters that would otherwise be interpreted as markup.

Comments

0 comments

0/2000 characters

No comments yet. Be the first to share your thoughts!