Cookies de statistiques et de publicité
Nous utilisons des cookies de statistiques et de publicité, tous deux destinés à Google. Si vous refusez, rien ne change visiblement pour vous.Aller à la page de confidentialité
Collez un texte contenant des références de caractères et lisez ce qu’il dit. Les références nommées, décimales et hexadécimales sont toutes traitées, et tout ce qui n’est pas reconnu est laissé visiblement intact plutôt que supprimé discrètement — c’est ce qui vous dit si l’entrée était étrange ou si c’est le décodeur qui l’était.
Où cela s’exécute
Rien n’est envoyé, puisqu’il n’y a pas de fichier : tout est calculé dans cette page.
Sans file d’attente et sans compte
Il répond aussi vite que votre machine le permet, et ne demande jamais qui vous êtes.
Autant de fois que vous voulez
Rien n’est compté ni plafonné : répondre à nouveau ne nous coûte rien.
L’implémentation en une ligne consiste à affecter `innerHTML` sur un élément détaché puis à relire `textContent`. Elle traite gratuitement les 2 231 références nommées, c’est ce que suggère presque tous les extraits de code du web, et c’est un analyseur HTML à qui l’on tend une entrée non fiable.
Un élément détaché n’exécute pas de script. Il déclenche en revanche des requêtes : une balise d’image avec une source distante produit une requête dès qu’elle est analysée, avant que quoi que ce soit ne soit relu. Une page dont toute la promesse est que votre entrée ne quitte jamais l’appareil ne peut pas contenir un chemin où coller la mauvaise chaîne en envoie une. Le jeu de références nommées est donc une table de correspondance, et c’est cette table qui autorise la promesse.
La table contient les références qu’on rencontre vraiment : les cinq structurelles, l’ensemble typographique qu’un CMS produit — tirets, guillemets courbes, points de suspension —, les symboles monétaires, les opérateurs mathématiques courants, les voyelles accentuées et une poignée de flèches. Les références numériques n’ont besoin d’aucune table, puisqu’elles désignent directement un point de code.
Tout le reste ressort exactement comme il est entré. C’est volontaire et c’est le comportement le plus utile : une référence intacte se voit, donc vous constatez qu’une référence étrange était dans votre entrée au lieu de vous demander où un mot est passé. Supprimer l’inconnu donnerait une sortie plus propre et une réponse moins bonne.
Si le résultat contient encore des références, le texte avait été échappé deux fois — la forme doublée se décode en la forme simple, et seule une seconde passe donne le caractère lui-même. C’est la raison la plus fréquente d’être sur cette page, et la cause est presque toujours la même : une valeur échappée au stockage puis échappée à nouveau à l’affichage.
Décodez autant de fois qu’il le faut pour lire, puis corrigez une seule fois à la source plutôt que répétitivement à l’arrivée. Un texte doit être stocké tel qu’il a été écrit et échappé seulement au moment où il entre dans une page ; échapper à l’entrée est exactement la façon dont la forme doublée s’est retrouvée en base.
Une référence numérique désignant un demi-codet — la plage U+D800 à U+DFFF — est laissée intacte, de même que tout ce qui dépasse U+10FFFF. Les deux sont en dehors de l’ensemble des caractères réels, et un décodeur qui en produit un rend une chaîne qui ne peut pas être encodée en UTF-8.
L’effet pratique de faire l’inverse est que la chose suivante dans laquelle vous collez le résultat lève une erreur, ailleurs, à propos d’une entrée invalide, sans mentionner rien de tout cela. Laisser la référence visible garde le problème là où il est.
Les flux RSS et Atom, où le corps d’un article est échappé pour pouvoir tenir dans du XML. Les exports de CMS, où un titre porte une référence numérique parce qu’un rédacteur a tapé une apostrophe courbe. Les lignes de journal et les messages d’erreur passés par un gabarit en sortant. Les réponses d’API d’un service qui produit du HTML en interne et vous en livre le rendu.
Dans chacun de ces cas l’échappement était correct là où il a eu lieu et il est faux là où vous êtes maintenant, ce qui fait du décodage une étape de traitement plutôt qu’une réparation. Si vous le faites à la main plus d’une fois, ce qu’il faut changer est ce qui vous donne du HTML quand vous demandez du texte.
Un texte français passé par un CMS revient très souvent avec `’` ou `’` partout où il y avait une apostrophe, parce que la correction typographique automatique remplace l’apostrophe droite par la courbe et que l’export échappe cette dernière. Un article de quelques milliers de signes en contient des dizaines.
Il vaut la peine de savoir que les deux apostrophes sont des caractères distincts, même après décodage. Une recherche sur « l’été » avec l’apostrophe droite ne trouvera pas un texte contenant la courbe, et inversement. C’est la cause d’un grand nombre de recherches infructueuses sur des contenus qui existent pourtant.
Un CMS français produit `«` et `»` pour les guillemets, souvent suivis ou précédés d’un ` ` que la typographie exige. Après décodage, cette espace insécable est invisible et reste pourtant dans la chaîne.
C’est la raison pour laquelle un titre décodé peut refuser de correspondre à la même chaîne saisie à la main : la différence est une espace ordinaire contre une insécable, à un ou deux endroits. Quand une comparaison échoue sur un texte visiblement identique, c’est la première chose à vérifier, et la page d’encodage hexadécimal la rend visible immédiatement.
Il ne remet pas les balises. Un document dont le balisage avait été échappé pour être montré comme exemple redevient, après décodage, du balisage actif : ce qui était un extrait de code affiché devient une structure. Le texte n’est pas revenu à son état d’origine, il a changé de nature.
C’est pourquoi décoder un document entier est rarement ce qu’on veut, et pourquoi cette page est faite pour un champ, un titre ou une ligne. Si vous décodez un corps d’article de flux RSS, ce que vous obtenez est du HTML destiné à être rendu, pas du texte destiné à être lu.
Elle serait pratique et elle serait un piège. Décoder en boucle jusqu’à ce que plus rien ne change transforme une esperluette littérale suivie d’un mot en autre chose dès que ce mot ressemble à une entité connue : un texte contenant « M&A » perd son sens à la deuxième passe.
Une passe par appel garde le contrôle du côté de la personne qui sait combien de couches il y avait. C’est aussi ce qui rend l’outil utilisable comme diagnostic : compter combien de fois il faut le relancer vous dit combien de fois la valeur a été échappée en amont, ce qui est l’information à ramener à l’équipe concernée.
Parce qu’elle n’est pas dans la table employée ici, ou parce qu’elle désigne quelque chose qui n’est pas un caractère valide. Les références inconnues sont laissées visibles exprès : les supprimer donnerait une sortie plus propre et cacherait le fait qu’une chose étrange était dans l’entrée. S’il s’agit d’une vraie référence qui devrait être reconnue, cela vaut un signalement.
Le texte a été échappé deux fois, donc une passe n’a retiré qu’une couche. Décodez à nouveau et vous obtiendrez le vrai caractère. La cause est presque toujours une valeur échappée à l’enregistrement puis échappée à nouveau au rendu, ce qu’il vaut mieux corriger à la source qu’à chaque endroit où on la lit.
Oui — décimales et hexadécimales, et aucune des deux n’a besoin d’une table puisque chacune désigne directement un point de code. Ce qui est exclu délibérément, c’est toute référence à un demi-codet ou au-delà du dernier point de code valide, puisque les décoder donne une chaîne impossible à réencoder en UTF-8.
Oui, et la conception porte précisément là-dessus. L’implémentation habituelle d’un décodeur d’entités confie le texte à un analyseur HTML, lequel peut émettre des requêtes réseau pour des images avant que quoi que ce soit ne soit relu. Celle-ci emploie une table et n’analyse jamais, donc coller une chaîne hostile ne fait que la décoder.
Vous le pouvez, mais vous ne le voulez probablement pas. Décoder un document retransforme ses exemples de balisage échappés en balisage réel, ce qui change ce que le document signifie. Cette page est faite pour un champ, un titre ou une ligne de texte échappée une fois de trop.