À propos de cet outil
Cet outil encode une chaîne au format « pourcentage » (percent-encoding) pour l'utiliser sans risque dans une adresse web, ou décode une adresse encodée pour retrouver un texte lisible. Trois modes couvrent les besoins courants : valeur de paramètre (comme encodeURIComponent), adresse complète (comme encodeURI) et formulaire, où l'espace s'écrit « + ». Lorsque le texte est une adresse, l'outil la décompose en protocole, hôte, chemin, fragment et paramètres décodés.
Comment utiliser cet outil
- Choisissez le type d'encodage : valeur de paramètre, adresse complète ou formulaire.
- Saisissez un texte à gauche pour obtenir sa version encodée à droite, ou collez un texte encodé à droite pour le décoder.
- Si le texte est une adresse complète, consultez l'analyse : protocole, hôte, chemin, fragment et paramètres de la requête décodés.
- Copiez le résultat ou exportez-le dans un fichier.
Anatomie d'une adresse web et caractères réservés
Une adresse web se compose de plusieurs parties, que la norme RFC 3986 sépare par des caractères précis :
https://utilisateur@exemple.fr:8080/dossier/page?cle=valeur&autre=1#sectionhttps: le schéma (protocole) ;exemple.fr: l'hôte, avec éventuellement un identifiant (utilisateur@) et un port (:8080) ;/dossier/page: le chemin, dont les segments sont séparés par « / » ;?cle=valeur&autre=1: la requête (query), faite de paramètres séparés par « & » ;#section: le fragment, qui désigne un endroit de la page et n'est jamais envoyé au serveur.
Les caractères : / ? # [ ] @ et ! $ & ' ( ) * + , ; = sont dits réservés : ils ont un rôle dans cette structure. Seuls les lettres, les chiffres et les quatre signes - . _ ~ sont toujours sûrs (caractères « non réservés »). Tout autre caractère, notamment l'espace, les accents et les symboles, doit être encodé en pourcentage : un « % » suivi des deux chiffres hexadécimaux de l'octet. Les caractères non ASCII sont d'abord convertis en octets UTF-8 : « é » s'écrit %C3%A9 (deux octets), « € » s'écrit %E2%82%AC (trois octets).
Quel mode d'encodage choisir ?
La confusion la plus courante concerne les deux fonctions JavaScript encodeURI et encodeURIComponent, que l'outil reprend sous deux noms plus parlants :
| Mode | Équivalent | Ce qui reste lisible | Quand l'utiliser |
|---|---|---|---|
| Valeur de paramètre | encodeURIComponent | Lettres, chiffres et - _ . ! ~ * ' ( ) | Une valeur insérée dans une adresse : texte d'une recherche, nom, e-mail, URL imbriquée. |
| Adresse complète | encodeURI | En plus : ; , / ? : @ & = + $ # | Une adresse entière dont la structure doit rester intacte, mais qui contient des accents ou des espaces. |
| Formulaire | URLSearchParams | Lettres, chiffres et * - . _ ; l'espace devient « + » | Reproduire l'encodage des formulaires HTML (application/x-www-form-urlencoded). |
Pour envoyer la recherche « café & thé » dans un paramètre q, la valeur doit être encodée en mode paramètre : caf%C3%A9%20%26%20th%C3%A9. En mode adresse complète, le « & » resterait tel quel et couperait la valeur en deux paramètres : ?q=caf%C3%A9%20&%20th%C3%A9.
Les cinq erreurs d'encodage les plus courantes
- Le double encodage. Encoder un texte déjà encodé transforme chaque « % » en « %25 » : « café » devient
caf%C3%A9, puiscaf%25C3%25A9. Le texte s'affiche alors avec des « %C3%A9 » visibles. Si vous voyez%25partout, c'est le signe d'un encodage appliqué deux fois. - Le « + » interprété comme une espace. Dans la requête d'une adresse, « + » signifie « espace ». Un numéro comme
+33612345678écrit tel quel dans?tel=+33612345678est lu comme « 33612345678 » précédé d'une espace. Il faut écrire%2B33612345678. - L'utilisation d'
encodeURIpour une valeur. Les caractères « & », « = », « + » et « # » ne sont pas encodés : une valeur qui en contient casse la structure de la requête ou la tronque. - L'utilisation d'
encodeURIComponentsur une adresse entière. « https:// » devienthttps%3A%2F%2Fet l'adresse n'est plus reconnue comme telle. - Un mauvais encodage des caractères. D'anciens systèmes encodent « é » en Latin-1 (
%E9) au lieu de l'UTF-8 (%C3%A9). Le décodage échoue alors ou produit un caractère de remplacement. L'outil détecte ce cas et propose la lecture en Latin-1.
Dans un lien mailto:, les espaces doivent aussi s'écrire %20 : le « + » y serait pris pour un plus littéral.
Noms de domaine accentués, longueur maximale et sécurité
- Les noms de domaine ne s'encodent pas en pourcentage. Un nom accentué (« café.fr ») est converti en Punycode, avec le préfixe « xn-- » :
xn--caf-dma.fr. Les navigateurs font la conversion eux-mêmes, mais pas toujours les programmes qui traitent une adresse. - La longueur. Aucune norme ne fixe de limite stricte, mais les navigateurs, les serveurs et les services tiers en imposent. Le protocole des plans de site limite une adresse à 2 048 caractères, un repère prudent à respecter pour éviter les problèmes de compatibilité. Évitez de placer de grandes quantités de données dans une requête : utilisez une requête
POSTavec un corps. - Les chemins et le « / » encodé. Dans une valeur de chemin, un « / » doit s'écrire
%2F. Certains serveurs refusent pourtant cette séquence par défaut, car elle a servi à contourner des contrôles d'accès : à tester avant de s'en servir. - La sécurité. Toute donnée saisie par un utilisateur et insérée dans une adresse doit être encodée. Sans cela, une valeur contenant « & » ou « # » peut modifier la requête (injection de paramètres). Décodez aussi une seule fois : décoder deux fois une valeur ouvre la porte à des contournements de filtres (par exemple
%252e%252e%252fqui, décodé deux fois, devient../).
Pour fabriquer l'adresse lisible d'un article à partir de son titre, utilisez le générateur de slugs, qui évite d'avoir à encoder quoi que ce soit.
Questions fréquentes
Pourquoi encoder une adresse web ?
Certains caractères ont un rôle précis dans une adresse (« / » sépare les dossiers, « ? » ouvre la requête, « & » sépare les paramètres, « # » ouvre le fragment) et d'autres, comme les espaces ou les accents, n'y sont pas autorisés. L'encodage en pourcentage les remplace par « % » suivi de deux chiffres hexadécimaux : l'espace devient %20 et « é » devient %C3%A9 (ses deux octets en UTF-8).
Quelle différence entre « valeur de paramètre » et « adresse complète » ?
Le mode « valeur de paramètre » (encodeURIComponent) encode aussi / ? & = # : à utiliser pour une valeur insérée dans une adresse, comme le texte d'une recherche. Le mode « adresse complète » (encodeURI) laisse ces caractères intacts pour ne pas casser la structure d'une adresse entière.
Pourquoi des « + » à la place des espaces ?
C'est la convention des formulaires web (application/x-www-form-urlencoded) : dans une requête, l'espace peut s'écrire « + ». Dans le chemin d'une adresse, en revanche, « + » est un plus littéral et l'espace s'écrit %20. Le mode « formulaire » applique la première convention.
Pourquoi le décodage échoue-t-il avec « %E9 » ?
Parce que %E9 est un « é » du Latin-1 (ISO-8859-1), un ancien encodage, alors que les adresses actuelles utilisent l'UTF-8, où « é » s'écrit %C3%A9. L'outil détecte ce cas, l'explique et montre le texte tel qu'il serait lu en Latin-1.
Mes adresses sont-elles envoyées à un serveur ?
Non, l'encodage, le décodage et l'analyse se font dans votre navigateur.