Comment décoder une URL
- Collez le texte encodé dans URL ou texte encodé.
- Gardez Traiter + comme une espace activé pour les query strings et les données de formulaire, et désactivez-le pour les chemins ou les valeurs Base64.
- Si le résultat contient encore des séquences
%XX, la ligne d’état le signale : cochez Décoder plusieurs fois. - Pour un fichier de log ou une colonne de valeurs, cochez Chaque ligne séparément afin que chaque ligne soit décodée indépendamment.
- Choisissez un Jeu de caractères si la source n’était pas en UTF-8, puis Copier la sortie.
Quand l’entrée est une URL complète, le tableau sous les panneaux affiche le schéma, l’hôte, le chemin décodé, chaque paramètre de requête sur sa propre ligne et le fragment. C’est le moyen le plus rapide de lire une longue URL de tracking ou de redirection.
Exemples
| Encodé | Décodé | Remarque |
|---|---|---|
q=base64%20%26%20%22url-safe%22 | q=base64 & "url-safe" | %26 est &, %22 est " |
lang=%E6%97%A5%E6%9C%AC%E8%AA%9E | lang=日本語 | trois octets par caractère en UTF-8 |
%F0%9F%98%80 | 😀 | les emoji prennent quatre octets |
q=a+b%2Bc | q=a b+c | avec Traiter + comme une espace |
next=%252Fhome%253Ftab%253D1 | next=/home?tab=1 | double encodage, deux passes |
caf%E9 | café | Windows-1252 ou ISO-8859-1, pas UTF-8 |
Le double encodage
Chaque fois qu’une chaîne déjà encodée est encodée à nouveau, chaque % devient %25. Ainsi / devient %2F, puis %252F, puis %25252F. Cela arrive quand une URL de redirection traverse plusieurs services, ou quand un framework encode une valeur que le code avait déjà encodée.
Pour lire une telle chaîne, décodez jusqu’à ce qu’il ne reste plus d’échappement ; Décoder plusieurs fois le fait et indique le nombre de passes. Pour corriger la cause, trouvez la couche qui encode une seconde fois. Une URL imbriquée légitime, comme un paramètre next= ou url= contenant une autre URL, demande exactement une couche supplémentaire, pas plus.
Les passerelles de sécurité des e-mails sont une source fréquente de ce genre d’imbrication. Une URL Safe Links de Microsoft Defender ressemble à https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fexample.com%2Freset%3Fid%3D42&data=… ; collez-la et le tableau des paramètres montre la vraie destination, https://example.com/reset?id=42, sans que vous ayez à cliquer.
Échappements mal formés et anciens jeux de caractères
Un % doit être suivi d’exactement deux chiffres hex. 100%, %zz ou une URL coupée au milieu d’un échappement sont des erreurs, et le décodeur affiche Échappement cassé à la position N. Le decodeURIComponent de JavaScript lève URIError: URI malformed dans les mêmes cas, alors que le unquote de Python laisse la séquence telle quelle.
L’autre source d’erreurs est le jeu de caractères. Les échappements pourcent sont des octets, et %E9 seul n’est pas de l’UTF-8 valide. Python le décode en caractère de remplacement, JavaScript lève une exception. Avec Jeu de caractères sur Windows-1252 ou ISO-8859-1, il se décode en é. Shift_JIS, GBK, EUC-KR, KOI8-R et d’autres anciens jeux de caractères figurent dans la même liste.
Le décodage d’URL dans le code
decodeURIComponent("a%20b%26c") // "a b&c"
new URLSearchParams("q=a+b%2Bc").get("q") // "a b+c"
from urllib.parse import unquote, unquote_plus, parse_qs
unquote("caf%C3%A9") # 'café'
unquote("caf%E9", encoding="latin-1") # 'café'
unquote_plus("q=a+b%2Bc") # 'q=a b+c'
parse_qs("q=a+b%2Bc&tag=x&tag=y") # {'q': ['a b+c'], 'tag': ['x', 'y']}
decodeURIComponent ne transforme pas + en espace ; URLSearchParams et unquote_plus, si. Choisissez celui qui correspond à la façon dont la chaîne a été produite. Pour l’encodage, voir l’encodeur d’URL, et pour du Base64 arrivé par une URL, le décodeur Base64URL.
FAQ
Comment décoder une chaîne encodée en URL ?
Collez-la ci-dessus ; le texte décodé s’affiche pendant la saisie. En JavaScript, utilisez decodeURIComponent(s) ; en Python, urllib.parse.unquote(s), ou unquote_plus(s) quand + représente une espace.
Pourquoi mon URL décodée contient-elle encore %20 ou %3A ?
Elle a été encodée deux fois. Une passe transforme %2520 en %20 ; une deuxième donne l’espace. Cochez Décoder plusieurs fois et le décodeur continue jusqu’à ce qu’il ne reste plus d’échappement, dans la limite de cinq passes, en indiquant combien il en a fallu.
Pourquoi decodeURIComponent lève-t-il « URI malformed » ?
Soit un % n’est pas suivi de deux chiffres hex, comme dans 100%, soit les octets ne sont pas de l’UTF-8 valide, comme %E9 venant d’un système en Windows-1252. Ce décodeur indique la position exacte, et l’option Jeu de caractères décode les anciens encodages.
Faut-il décoder + en espace ?
Dans les query strings et les corps de formulaire, oui : c’est pourquoi Traiter + comme une espace est activé par défaut. Dans les chemins d’URL et les valeurs susceptibles de contenir du Base64, décochez-le, car + y est un plus littéral.