Encodeur et décodeur d'URL
Pour une valeur de requête ou un segment de chemin. Encode tout sauf les lettres, les chiffres et - _ . ! ~ * ' ( ), comme encodeURIComponent.
Collez une URL ci-dessus. Ses parties et ses paramètres s'affichent ici, prêts à être modifiés.
Paramètres de requête
Cette URL n'a aucun paramètre de requête.
Paramètres du fragment
Tout s'exécute dans votre navigateur et rien de ce que vous collez n'est envoyé. C'est important, car les URL contiennent souvent des jetons et des identifiants de session.
Pour encoder et décoder une URL en ligne pendant la saisie, collez votre texte : l’outil transforme les espaces, les lettres accentuées et les symboles comme & ou ? en séquences encodées en pourcentage, telles que %20, et les ramène à un texte lisible. Le second onglet est un analyseur d’URL. Il découpe n’importe quelle adresse en protocole, hôte, chemin et paramètres de requête que vous pouvez modifier, désactiver ou débarrasser de leurs balises de suivi, puis il réécrit pour vous l’URL correctement encodée. Tout se passe dans votre navigateur.
Comment encoder et décoder une URL
- Saisissez ou collez votre texte dans le champ de l’onglet Encoder / Décoder. Le Résultat se met à jour à chaque frappe.
- Choisissez le Sens. Encoder rend un texte sûr pour une URL, Décoder retransforme
caf%C3%A9%20au%20laitencafé au lait. Collez un texte contenant des séquences comme%20dans le champ vide et l’outil passe tout seul en Décoder (L’encoder plutôt rétablit l’autre sens). Un texte simple qui a besoin d’être encodé, collé en mode Décoder, fait passer en Encoder de la même façon, avec Le décoder plutôt. - Pour encoder, choisissez sous Encoder comme la nature du texte (voir la section suivante). Le réglage par défaut, Valeur de paramètre, convient à une valeur de requête isolée.
- Copier place le résultat dans le presse-papiers. Inverser envoie le résultat dans le champ de saisie et change le sens. C’est un contrôle aller-retour rapide : décoder ce que vous venez d’encoder doit redonner votre texte d’origine.
Chaque caractère modifié par l’outil est surligné dans le résultat. Survolez-le pour voir le caractère, son point de code Unicode et ses octets, par exemple é U+00E9 %C3%A9. Sous les champs figurent le nombre de Caractères, d’Octets UTF-8 et de Caractères encodés (ou Caractères décodés). Essayer un exemple charge la phrase Prix : 50 % de remise, café & crème brûlée ? Oui !, qui compte 50 caractères mais 54 octets UTF-8, car chaque lettre accentuée occupe deux octets.
À l’encodage, Chaque ligne séparément encode chaque ligne pour elle-même et conserve les sauts de ligne, ce qui convient à une liste de valeurs ou de liens. Sans cette option, le saut de ligne est lui aussi encodé et devient %0A. Quand le texte est une URL avec des paramètres, l’outil propose La découper en parties, qui ouvre l’adresse dans l’onglet de l’analyseur.
Encoder un paramètre d’URL, une URL complète ou des données de formulaire
Tous les caractères n’ont pas à être encodés partout. Une barre oblique sépare des dossiers dans un chemin, mais n’est qu’une donnée ordinaire dans la valeur d’un paramètre : le bon résultat dépend donc de ce que vous encodez. Encoder comme propose quatre modes :
- Valeur de paramètre fonctionne comme
encodeURIComponentde JavaScript et convient à une valeur de requête ou à un segment de chemin. Il encode tout sauf les lettres, les chiffres et- _ . ! ~ * ' ( ), de sorte qu’un&, un=, un/ou un?dans la valeur ne peut pas casser l’URL. Encodercafé & crèmedonnecaf%C3%A9%20%26%20cr%C3%A8me, prêt à être placé aprèsq=. - URL complète s’adresse à une adresse entière qu’il suffit de nettoyer. Il encode les espaces, les caractères non ASCII, les caractères de contrôle, l’accent grave et
" < > \ ^ { | }, et conserve tout ce qui donne sa structure à une URL :: / ? # [ ] @ ! $ & ' ( ) * + , ; =. Ainsihttps://example.com/search?q=café au lait&lang=frdevienthttps://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Les séquences déjà encodées restent telles quelles, et un%isolé devient%25. C’est ce qui le distingue deencodeURIde JavaScript, qui transforme un%20existant en%2520et encode les crochets d’une adresse IPv6 commehttp://[2001:db8::1]:8080/. - Données de formulaire suit le format application/x-www-form-urlencoded (en anglais) que produisent les formulaires HTML et
URLSearchParams. Un espace devient+, et seuls les lettres, les chiffres et* - . _restent non encodés :! ' ( ) ~sont donc encodés eux aussi. - RFC 3986 strict ne laisse sans encodage que les caractères non réservés de la RFC 3986 (en anglais) : les lettres, les chiffres et
- . _ ~. OAuth 1.0 (RFC 5849) et AWS Signature Version 4 exigent exactement cette forme, car une signature ne correspond que si les deux côtés encodent!ou*de la même manière.
Les mêmes caractères dans chaque mode :
| Caractère | Valeur de paramètre | URL complète | Données de formulaire | RFC 3986 strict |
|---|---|---|---|---|
| espace | %20 | %20 | + | %20 |
& | %26 | & | %26 | %26 |
/ | %2F | / | %2F | %2F |
+ | %2B | + | %2B | %2B |
~ | ~ | ~ | %7E | ~ |
! | ! | ! | %21 | %21 |
* | * | * | * | %2A |
é | %C3%A9 | %C3%A9 | %C3%A9 | %C3%A9 |
Le texte est toujours encodé en UTF-8 et les chiffres hexadécimaux sont toujours en majuscules. Si la saisie contient déjà des séquences comme %20, une remarque l’indique et propose Le décoder plutôt, pour que vous n’encodiez pas le texte deux fois par erreur.
Pour transmettre du JSON dans un paramètre de requête, minifiez-le dans le formateur JSON et encodez-le en Valeur de paramètre : {"id":7,"tags":["a","b"]} devient %7B%22id%22%3A7%2C%22tags%22%3A%5B%22a%22%2C%22b%22%5D%7D. Cela marche aussi dans l’autre sens : décodez le paramètre ici, puis formatez-le là-bas.
Problèmes au décodage d’URL : signes plus, %2520 et séquences cassées
Le décodage fonctionne en général sans souci, mais quatre situations font trébucher. L’outil les gère toutes au lieu de s’arrêter sur une erreur :
- Un signe plus représente un espace dans les données de formulaire et dans la plupart des chaînes de requête. Décoder + en espace est activé par défaut, donc
caf%C3%A9+au+laitse décode encafé au lait. Dans une URL complète, seuls les signes plus situés après le?comptent comme des espaces, car dans un chemin le plus est un caractère ordinaire. Désactivez l’option quand un signe plus doit rester un plus. Un plus encodé en%2Breste toujours un plus. - Le double encodage se produit quand deux couches de code encodent chacune la même valeur, ce que la RFC 3986 déconseille expressément. Chaque
%devient%25, et un espace passe de%20à%2520. Si le résultat décodé contient encore des séquences comme%20, l’outil signale que le texte a probablement été encodé deux fois et propose Décoder à nouveau. - Une séquence invalide, c’est-à-dire un
%qui n’est pas suivi de deux chiffres hexadécimaux, comme dans100%ou%G1, fait lever une URIError àdecodeURIComponentde JavaScript. Ici, ces séquences sont laissées telles quelles, marquées en rouge et comptées, et le reste du texte est décodé. - Les anciens liens Latin-1 datent d’avant l’UTF-8, quand certains sites encodaient
éen un seul octet%E9.caf%E9n’est pas de l’UTF-8 valide :decodeURIComponentéchoue etunquotede Python renvoiecafsuivi du caractère de remplacement U+FFFD. L’outil lit ces octets comme du Windows-1252, décodecaf%E9encaféet ajoute une remarque pour le signaler.
Les caractères de contrôle d’un texte décodé, comme une tabulation ou un octet nul, sont affichés sous forme de symboles visibles tels que ␉ et ␀, mais Copier copie le texte réel.
Analyseur d’URL : découper une URL et modifier ses paramètres de requête
Collez une adresse dans le champ URL de l’onglet Analyser l’URL : elle est découpée en Protocole, Hôte, Port, Chemin et Fragment, plus Nom d’utilisateur et Mot de passe quand l’URL en contient. Les valeurs sont affichées décodées, cet onglet est donc aussi le moyen le plus rapide de décoder les paramètres d’une URL : vous lisez sac étanche au lieu de sac+%C3%A9tanche. La modification fonctionne dans les deux sens, comme la barre d’adresse et le tableau des paramètres de Postman. Changez un champ et l’URL est réécrite aussitôt, correctement encodée ; changez l’URL et toutes les parties sont relues. Les parties que vous ne touchez pas restent exactement telles quelles, caractère pour caractère.
Le tableau Paramètres de requête liste chaque paramètre avec son Nom et sa Valeur. Décochez Inclure dans l’URL pour écarter un paramètre sans le supprimer, ce qui aide quand vous cherchez celui qui fait échouer une requête. Ajouter un paramètre, Supprimer le paramètre et Trier de A à Z font ce qu’ils annoncent. Les noms répétés comme tag=a&tag=b et les noms sans valeur comme ?debug sont conservés. Espaces dans les paramètres détermine si les espaces s’écrivent %20 ou + ; par défaut, l’outil suit l’URL que vous avez collée.
Les liens de connexion et de paiement contiennent souvent une seconde URL dans un paramètre, encodée pour que ses propres ? et & ne se mélangent pas à ceux de l’URL extérieure :
https://auth.example.com/authorize?client_id=abc&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback%3Ftab%3D2
Une valeur qui est elle-même une URL, typiquement dans redirect_uri, return, url ou next, reçoit un bouton Modifier l’URL à l’intérieur. L’adresse interne https://app.example.com/callback?tab=2 s’ouvre comme un niveau à part, avec ses propres parties et paramètres, un fil d’Ariane (URL principale › redirect_uri) permet de revenir, et chaque modification est réencodée dans l’URL extérieure. Copier l’URL principale copie le résultat. Cela fonctionne sur plusieurs niveaux de profondeur.
Quand la partie après # ressemble à des paramètres, comme #access_token=...&state=... dans le flux implicite d’OAuth ou #/search?q=shoes dans les routes des applications monopages, un second tableau, Paramètres du fragment, les liste aussi.
L’analyseur signale également les problèmes : une URL sans protocole, que les navigateurs traitent comme un lien relatif ; un port en dehors de 0 à 65535 ; et des caractères qui doivent être encodés, comme les espaces, les lettres accentuées, " ou <, que Les encoder corrige en une seule étape. Un texte sans adresse, comme a=1&b=2, est lu comme une chaîne de requête. Pour un nom de domaine internationalisé, l’outil affiche la forme Punycode qu’utilisent le DNS et les navigateurs, de sorte que münchen.de devient xn--mnchen-3ya.de, et un domaine commençant par xn-- reçoit sa forme lisible.
Copier l’URL copie l’adresse terminée, Ouvrir l’ouvre dans un nouvel onglet (liens http et https uniquement), et Copier en JSON vous donne les paramètres sous forme d’objet JSON, les noms répétés étant regroupés dans un tableau.
Supprimer les UTM et autres paramètres de suivi d’une URL
Les liens issus de newsletters, de publicités et de réseaux sociaux portent des paramètres qui indiquent seulement au site d’où vient le visiteur. Les paramètres UTM utm_source, utm_medium, utm_campaign, utm_term et utm_content remontent à Urchin, le prédécesseur de Google Analytics. Les identifiants de clic comme fbclid (Facebook), gclid (Google Ads) et msclkid (Microsoft Advertising) sont ajoutés par les plateformes elles-mêmes.
L’analyseur les repère avec une balise suivi, et Supprimer le suivi (n) les supprime tous d’un coup. Outre tout paramètre utm_*, il en reconnaît plus de 20 autres, comme ttclid (TikTok), mc_cid (Mailchimp) et _hsenc (HubSpot). Les paramètres dont la page a besoin restent en place : dans le lien de boutique chargé par Essayer un exemple, Supprimer le suivi (4) retire utm_source, utm_medium, utm_campaign et fbclid et conserve q, size, return et le fragment #reviews.
Un lien destiné à un code QR mérite d’être nettoyé ici d’abord. Sans paramètres de suivi, il est plus court, et un lien plus court donne un code moins dense, plus facile à scanner.
Qu’est-ce que l’encodage URL (encodage-pourcent) et comment les caractères deviennent %XX
L’encodage-pourcent, aussi appelé encodage URL, écrit un caractère sous la forme % suivi de deux chiffres hexadécimaux. Une URL ne peut contenir qu’un ensemble limité de caractères ASCII, et certains d’entre eux ont un rôle : ? ouvre la requête, & sépare les paramètres, # ouvre le fragment. La RFC 3986 les appelle caractères réservés (: / ? # [ ] @ et ! $ & ' ( ) * + , ; =). Les lettres, les chiffres et - . _ ~ sont non réservés et n’ont jamais besoin d’être encodés. Tout le reste, ainsi que chaque caractère réservé utilisé comme simple donnée, est encodé.
Les caractères hors ASCII sont d’abord convertis en octets UTF-8, et chaque octet reçoit son propre %XX :
éest U+00E9, que l’UTF-8 stocke sur les deux octets C3 A9, il devient donc%C3%A9.€est U+20AC, trois octets :%E2%82%AC.- Un émoji comme U+1F600 (visage souriant) occupe quatre octets :
%F0%9F%98%80.
%c3%a9 et %C3%A9 signifient la même chose, mais la RFC 3986 recommande les majuscules, ce qu’écrit l’outil. Un tableau d’encodage-pourcent des caractères les plus courants :
| Caractère | Encodé | Caractère | Encodé |
|---|---|---|---|
| espace | %20 | + | %2B |
! | %21 | , | %2C |
" | %22 | / | %2F |
# | %23 | : | %3A |
$ | %24 | ; | %3B |
% | %25 | = | %3D |
& | %26 | ? | %3F |
' | %27 | @ | %40 |
( | %28 | [ | %5B |
) | %29 | ] | %5D |
* | %2A | saut de ligne | %0A |
Encodage d’URL en JavaScript, Python et PHP
Chaque langage a ses fonctions pour cela, et elles diffèrent surtout par leur traitement des espaces, des barres obliques et de ! ' ( ) * ~.
JavaScript propose encodeURIComponent pour une valeur, encodeURI pour une adresse entière et URLSearchParams pour l’encodage de formulaire :
encodeURIComponent("café & crème") // "caf%C3%A9%20%26%20cr%C3%A8me"
encodeURI("https://example.com/a b?q=café") // "https://example.com/a%20b?q=caf%C3%A9"
new URLSearchParams({ q: "café & crème" }).toString() // "q=caf%C3%A9+%26+cr%C3%A8me"
decodeURIComponent("caf%C3%A9") // "café"
decodeURIComponent ne transforme pas + en espace, et il lève une URIError sur une séquence invalide comme 100%.
En Python, les fonctions se trouvent dans urllib.parse. quote conserve / par défaut (safe='/') et encode tout le reste sauf les caractères non réservés de la RFC 3986. quote_plus écrit les espaces en + et encode aussi / :
from urllib.parse import quote, quote_plus, urlencode, unquote_plus
quote("café & crème/brûlée") # 'caf%C3%A9%20%26%20cr%C3%A8me/br%C3%BBl%C3%A9e'
quote("a b/c", safe="") # 'a%20b%2Fc'
quote_plus("café & crème/brûlée") # 'caf%C3%A9+%26+cr%C3%A8me%2Fbr%C3%BBl%C3%A9e'
urlencode({"q": "café & crème", "page": 2}) # 'q=caf%C3%A9+%26+cr%C3%A8me&page=2'
unquote_plus("caf%C3%A9+au+lait") # 'café au lait'
En PHP, urlencode encode comme un formulaire HTML et écrit un espace en +, tandis que rawurlencode suit la RFC 3986 et écrit %20 :
urlencode("café & crème"); // "caf%C3%A9+%26+cr%C3%A8me"
rawurlencode("café & crème"); // "caf%C3%A9%20%26%20cr%C3%A8me"
rawurlencode donne le même résultat que RFC 3986 strict. urlencode correspond à Données de formulaire, sauf pour *, qu’il encode en %2A.
Questions fréquentes
Faut-il encoder un espace en %20 ou en + ?
%20 fonctionne partout dans une URL. Un + ne signifie un espace que dans la chaîne de requête et dans les données de formulaire, le format qu'envoient les formulaires HTML. Dans un chemin, + est un signe plus ordinaire : /a+b reste donc /a+b. Quand une valeur de requête a besoin d'un vrai signe plus, écrivez-le %2B. Dans l'outil, Données de formulaire écrit les espaces en + et les trois autres modes en %20.
Que signifient %20, %2F et %3D dans une URL ?
Ce sont des caractères encodés : %20 est un espace, %2F une barre oblique et %3D un signe égal. Parmi les autres que l'on croise souvent, %26 (&), %3F (?), %3A (:), %2C (virgule) et %27 (apostrophe). Les deux chiffres sont le code du caractère en hexadécimal. Les lettres accentuées et les autres caractères non ASCII occupent de deux à quatre paires de ce genre, comme %C3%A9 pour é. Collez toute la chaîne dans le décodeur pour la lire.
Quelle différence entre encodeURI et encodeURIComponent ?
encodeURI est conçu pour une adresse entière et laisse intacts les caractères qui la structurent, comme : / ? # & =. encodeURIComponent est conçu pour une seule partie, une valeur de paramètre ou un segment de chemin, et encode aussi ces caractères : https://example.com/?a=1&b=2 devient donc https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2. Dans cet outil, Valeur de paramètre correspond à encodeURIComponent, et URL complète ressemble à encodeURI mais conserve les séquences existantes comme %20 au lieu de les transformer en %2520.
Comment supprimer les paramètres UTM d'une URL ?
Collez le lien dans l'onglet Analyser l'URL et appuyez sur Supprimer le suivi (n). Cela supprime d'un coup toutes les balises utm_* et les identifiants de clic comme fbclid et gclid. Appuyez ensuite sur Copier l'URL. Pour n'en retirer que certains, utilisez Supprimer le paramètre sur les lignes dont vous ne voulez pas.
L'encodage URL est-il la même chose que le chiffrement ou le Base64 ?
Non. L'encodage URL ne cache rien : n'importe qui peut redécoder caf%C3%A9 en café, il ne protège donc jamais un mot de passe ni un jeton. Il rend seulement les caractères utilisables dans une adresse. Le Base64 est un autre encodage, qui transforme n'importe quelles données, fichiers binaires compris, en une chaîne de 64 caractères. Une chaîne Base64 placée dans une URL doit quand même voir ses +, / et = encodés, sauf si vous utilisez la variante URL safe, que l'encodeur et décodeur Base64 sait produire.
Les URL que je colle sont-elles envoyées ou conservées ?
Non. L'encodage, le décodage et l'analyse s'exécutent dans votre navigateur, et rien de ce que vous collez n'est envoyé à un serveur. C'est important, car les URL contiennent souvent des jetons d'accès, des identifiants de session ou des codes de réinitialisation de mot de passe. Le navigateur ne retient que l'onglet et les options choisis, jamais les textes. La seule action qui charge l'adresse est Ouvrir, qui l'ouvre dans un nouvel onglet exactement comme le ferait un clic sur le lien.
D’autres outils pour les programmeurs se trouvent dans la catégorie Développeurs, et les outils qui transforment un format en un autre sont réunis dans Convertisseurs. Pour trouver ce qui diffère entre deux longues URL, par exemple un appel d’API qui marche et un qui échoue, collez-les dans l’outil de comparaison de textes et comparez par caractères.