Encodage en pourcentage dans les URL : ce que signifient vraiment %20, + et %2F
L’encodage en pourcentage écrit un caractère qu’une URL ne peut pas transporter en toute sécurité sous la forme d’un signe pourcent suivi de sa valeur d’octet en hexadécimal. Un espace devient %20, une esperluette devient %26 et une barre oblique devient %2F. Cet encodage protège la structure d’un lien, car des caractères comme & et = séparent les éléments d’une chaîne de requête.
Quels caractères peuvent rester tels quels
La norme URI (RFC 3986), sur laquelle reposent les URL, laisse certains caractères intacts : les lettres de A à Z et de a à z, les chiffres, et les quatre signes - _ . ~. Ceux-là n’ont jamais besoin d’être encodés. D’autres caractères ont un rôle dans une URL. Les deux-points séparent le protocole du reste, la barre oblique sépare les parties du chemin, le point d’interrogation commence la requête, le dièse commence le fragment, et & et = découpent la requête en noms et en valeurs. Un caractère qui a un rôle doit être encodé lorsqu’on veut le traiter comme une donnée et non comme une structure.
C’est pourquoi un même caractère peut être encodé à un endroit et pas à un autre. Dans la valeur d’une requête, une esperluette doit devenir %26, sinon le lien se coupe au mauvais endroit. Dans le chemin d’un lien, ce n’est qu’un caractère comme un autre.
Lettres non anglaises
Les lettres hors de l’alphabet anglais de base sont encodées sous forme de leurs octets UTF-8, chaque octet étant écrit en code pourcent. Le « é » de café correspond aux deux octets C3 et A9 ; il devient donc %C3%A9, et le mot entier devient caf%C3%A9.
Un exemple simple rend ces règles concrètes. Le texte a b&c=d/é, encodé comme composant, devient a%20b%26c%3Dd%2F%C3%A9. Chaque caractère qui n’est ni une lettre sûre, ni un chiffre, ni un signe sûr est encodé : l’espace, l’esperluette, le signe égal, la barre oblique et la lettre accentuée.
Composant ou URL complète
Il existe deux types d’encodage, et ce n’est pas un hasard. Un encodage de composant traite chaque caractère réservé comme une donnée. Utilisez-le pour une seule valeur, comme un terme de recherche ou un nom de fichier dans un lien. Encoder « rock & roll » comme terme de recherche donne rock%20%26%20roll, si bien que l’esperluette reste à l’intérieur de la valeur.
Un encodage d’URL complète conserve la structure. Encoder https://example.com/a b donne https://example.com/a%20b, en laissant les barres obliques et les deux-points intacts. Utilisez-le pour une adresse complète qu’il faut rendre valide, et non pour une valeur placée à l’intérieur d’un lien.
L’outil URL propose pour cela un réglage Composant et un réglage URL complète. Le décodage en URL complète conserve aussi les caractères de structure échappés comme %26 et %3D, si bien que le lien fonctionne toujours après décodage.
Signes plus et données de formulaire
Les formulaires web suivent une autre convention. Quand un formulaire est envoyé sous forme de données, un espace s’écrit + et non %20. Un signe plus littéral s’écrit alors %2B. Ainsi, la phrase C++ tips devient C%2B%2B+tips dans les données de formulaire, et C%2B%2B%20tips avec un encodage de composant classique.
Le décodage suit la même logique. Dans une chaîne de requête, + signifie en général un espace. Dans le chemin d’un lien, + est un signe plus. L’outil ne lit + comme un espace que si Utiliser + pour les espaces (données de formulaire) est coché ; laissez donc cette case décochée pour les chemins et pour les valeurs où le signe plus est réel.
Lire une longue chaîne de requête
Un lien transporte souvent ses réglages après le point d’interrogation. Prenons cet exemple :
https://shop.example/search?q=red%20shirt&size=M&tag=summer%2Bsale
Décodé, il indique que la recherche porte sur red shirt, que la taille est M et que l’étiquette est summer+sale. Le %2B reste un signe plus parce qu’il a été encodé. Collez le lien dans l’outil URL : il affiche chaque nom et chaque valeur après décodage, ce qui rend un long lien facile à lire. Si vous ne voulez que l’adresse courte, sans les paramètres de suivi, nettoyez le lien d’abord.
Double encodage
L’erreur la plus courante consiste à encoder une valeur deux fois. Encoder à nouveau le texte %20 donne %2520, car le signe pourcent lui-même est encodé en %25. La page cherche alors un %20 littéral dans la valeur, et la recherche ou la page ne correspond plus. Décodez le lien une fois, vérifiez le résultat, et n’encodez une valeur que lorsque c’est nécessaire.
Échappements cassés
Un signe pourcent doit être suivi de deux chiffres hexadécimaux, et ces chiffres doivent former de l’UTF-8 valide pour les lettres accentuées. Un lien tronqué, ou un signe pourcent isolé tapé dans un texte, peut laisser un échappement cassé comme %E0%A4%A. L’outil décode ce qu’il peut, laisse les octets défectueux tels quels et indique combien il n’a pas pu décoder. Il ne s’arrête pas à la première erreur.
Cas particuliers
- Espaces dans un lien tapé à la main. La barre d’adresse du navigateur encode les espaces pour vous, mais un lien copié dans un document peut encore contenir des espaces bruts. Encodez-les avant de transmettre le lien.
- Noms de domaine non latins. Ils utilisent un autre système, le punycode, et encoder le chemin ou la requête ne change pas le nom d’hôte.
- Demi-emoji. Une copie incomplète peut laisser une seule moitié de substitution, qui ne peut pas être encodée. L’outil la remplace par le symbole de remplacement et vous le signale.
- Base64 dans les liens. Une valeur Base64 dans un lien suit ses propres règles, avec les signes - et _ à la place de + et /. Voir Base64 expliqué.
Comment faire avec fixmint
- Collez le texte ou le lien dans Texte ou URL.
- Choisissez Encoder ou Décoder, puis Composant pour une seule valeur, ou URL complète pour une adresse entière.
- Cochez Utiliser + pour les espaces (données de formulaire) pour les liens copiés depuis un formulaire web.
- Pour un lien, lisez Paramètres de requête, décodés pour voir chaque nom et chaque valeur.
- Copiez le résultat.
Réponses rapides
Que signifie %20 ?
Un espace. Sa valeur d’octet est 20 en hexadécimal.
Pourquoi trouve-t-on un + dans mon lien au lieu de %20 ?
Le lien vient probablement d’un formulaire, où + représente un espace. L’option « Utiliser + pour les espaces (données de formulaire) » le décode.
Pourquoi vois-je %2520 dans mon lien ?
La valeur a été encodée deux fois. Le signe pourcent de %20 a été encodé à nouveau en %25. Décodez une fois pour revenir à %20, puis une seconde fois pour obtenir l’espace.
Traduit de Version originale anglaise avec l’aide de l’IA.
Commentaires
Aucun commentaire pour l’instant. Soyez le premier.


