Codeur/Décodeur URL
Encoder et décoder rapidement les URL avec plusieurs modes d'encodage
Sélectionner la méthode de conversion
Qu'est-ce que l'encodage d'URL ?
L'encodage d'URL (également appelé encodage pourcent) est un mécanisme permettant de convertir des caractères dans un format pouvant être transmis en toute sécurité dans une URL. Les URL ne pouvant contenir que certains caractères ASCII, les autres caractères (comme les caractères accentués, les espaces et les symboles spéciaux) doivent être encodés au format %XX, où XX est la valeur hexadécimale du caractère. Par exemple : un espace est encodé en %20, et le caractère é est encodé en %C3%A9. L’encodage URL transforme des caractères en une forme transmissible dans les URLs. Espaces, texte non ASCII, caractères réservés et symboles peuvent être percent-encodés selon le contexte. Le point clé est de distinguer URL complète, segment de chemin, paramètre de query, corps de formulaire ou fragment, car chaque position a ses règles. Double encodage ou absence d’encodage peut casser liens, requêtes API, signatures, redirections et paramètres de recherche.
Comment utiliser
Comment utiliser
- Entrez ou collez le texte à encoder/décoder dans la zone de saisie
- Sélectionnez la méthode d'encodage : encodeURIComponent ou encodeURI
- Les résultats apparaissent automatiquement, copie en un clic ou échange entrée/sortie
- Pour le décodage, sélectionnez la méthode de décodage correspondante
Contexte URL
- Utilisez l'encodage des composants pour les valeurs de requête et les segments de chemin ; encoder une URL complète avec la mauvaise fonction peut casser les séparateurs comme /, ?, et &.
- Lors du décodage, vérifiez les doubles encodages tels que %2520, ce qui signifie qu'un signe pourcentage a été encodé à nouveau.
Cas d’utilisation
Principe technique
L'encodage URL (encodage pourcent) est défini par la RFC 3986 §2.1 et transforme les caractères au format %XX, où XX est la représentation hexadécimale majuscule à deux chiffres de la valeur de l'octet en UTF-8. La RFC définit deux classes de caractères : les caractères non réservés (A-Z a-z 0-9 - _ . ~) qui ne sont jamais encodés, et les caractères réservés (gen-delims : / ? # [ ] @ et sub-delims ! $ & ' ( ) * + , ; =) dont l'encodage dépend du contexte — ils portent un sens structurel dans certains composants d'URL mais sont des données littérales dans d'autres. JavaScript fournit deux fonctions intégrées avec des portées différentes. encodeURIComponent() encode chaque caractère sauf A-Z a-z 0-9 - _ . ! ~ * ' ( ) — c'est le choix correct pour encoder les valeurs individuelles de paramètres de requête, les segments de chemin et les identifiants de fragment. encodeURI() préserve en plus les caractères structurels : / ? # [ ] @ ! $ & ' ( ) * + , ; = et est conçu pour encoder des URI entiers tout en conservant leur structure syntaxique intacte. La distinction critique est que encodeURIComponent() encode / et &, ce qui casserait une URL si appliqué à la chaîne entière, tandis que encodeURI() les préserve. La gestion des espaces est le piège d'interopérabilité le plus courant. La RFC 3986 spécifie %20 comme encodage pourcent canonique du caractère espace (U+0020). Cependant, le type MIME application/x-www-form-urlencoded (utilisé par les soumissions de formulaires HTML depuis HTML 4.01) encode les espaces en +. Les deux ne sont pas interchangeables : un serveur attendant %20 interprétera + littéralement, et un serveur attendant + traitera %20 comme un signe pourcent suivi de 20. L'outil utilise encodeURIComponent() qui produit %20, conformément à la RFC 3986. Les utilisateurs décodant des payloads x-www-form-urlencoded (de corps POST ou de chaînes de requête parsées par des middlewares anciens) doivent être conscients de cette différence. La gestion des caractères multi-octets est automatique mais mérite d'être comprise : la chaîne d'abord encodée en octets UTF-8, puis chaque octet individuellement encodé en pourcent. Un caractère CJK comme « 你 » (U+4F60) occupe 3 octets UTF-8 (E4 BD A0), produisant %E4%BD%A0. Si le serveur analyse avec un jeu de caractères différent comme GBK, le même caractère s'encode en %C4%E3 (2 octets), et le résultat décodé sera corrompu à moins que les deux parties ne s'accordent sur UTF-8. Le double encodage est un autre bug courant : %2520 signifie un signe pourcent littéral (%25) suivi de 20, indiquant que l'entrée était déjà encodée en pourcent et a été encodée une seconde fois. Le mode décodage détecte les séquences malformées (%XX incomplet) et signale l'erreur plutôt que de produire silencieusement des données corrompues.
- encodeURIComponent vs encodeURI : encodeURIComponent encode / ? & # et est correct pour les valeurs de requête, segments de chemin et fragments ; encodeURI préserve ces caractères structurels et est correct pour les URL complètes — utiliser la mauvaise fonction est le bug d'encodage URL le plus courant.
- Ensembles de caractères réservés RFC 3986 : gen-delims (: / ? # [ ] @) portent la syntaxe URL ; sub-delims (! $ & ' ( ) * + , ; =) peuvent être des délimiteurs ou des données selon le composant URL — le contexte détermine si un caractère réservé est encodé en pourcent.
- Encodage des espaces : la forme canonique RFC 3986 est %20 (produite par encodeURIComponent) ; application/x-www-form-urlencoded utilise + (défaut des formulaires HTML) — les deux sont sémantiquement incompatibles et les mélanger casse les parseurs côté serveur.
- Encodage multi-octets UTF-8 : « 你 » (U+4F60) → octets UTF-8 E4 BD A0 → %E4%BD%A0 (3 octets encodés en pourcent) ; le même caractère sous GBK → %C4%E3 (2 octets) — l'accord sur le jeu de caractères entre client et serveur est obligatoire pour le texte non ASCII.
- Détection du double encodage : %2520 se décode d'abord en %20 puis en espace — la sortie du mode décodage révèle ce modèle ; les séquences malformées comme %ZZ ou %2 (incomplet) sont détectées et signalées comme erreurs.
- IRI (RFC 3987) : les identifiants de ressources internationalisés autorisent les caractères Unicode directement dans les URL ; les navigateurs affichent la forme décodée dans la barre d'adresse mais transmettent la forme UTF-8 encodée en pourcent sur le réseau — le mode encodage de l'outil montre ce qui transite réellement en HTTP.
- Gestion des erreurs de decodeURIComponent : passer une chaîne avec une séquence pourcent incomplète (% suivi de moins de 2 chiffres hexadécimaux) lance une URIError — l'outil enveloppe l'appel dans un try/catch et affiche le message d'erreur plutôt que de renvoyer silencieusement une chaîne vide.
Exemples
Encodage de caractères chinois (percent-encoding UTF-8)
Entrée: 你好世界 (4 caractères CJK, 12 octets UTF-8)
Sortie: %E4%BD%A0%E5%A5%BD%E4%B8%96%E7%95%8C
Chaque octet UTF-8 (E4, BD, A0, ...) devient %XX
RFC: RFC 3986 section 2.1 définit le percent-encoding pour les URI
Usage : paramètres de requête, segments de chemin, soumission de formulairesEncodage des séparateurs de chaîne de requête
Entrée: name=张三&age=20
Sortie: name%3D%E5%BC%A0%E4%B8%89%26age%3D20
%3D encode '=' (séparateur entre clé et valeur)
%26 encode '&' (séparateur entre paramètres)
RFC: RFC 3986 section 3.4 définit les caractères réservés du composant de requêteEncodage d'une URL complète (encodage partiel)
Entrée: https://example.com/search?q=你好&type=web
Sortie: https://example.com/search?q=%E4%BD%A0%E5%A5%BD&type=web
Note : le scheme, l'hôte et les séparateurs existants ne sont PAS encodés
Seule la valeur non ASCII de la chaîne de requête est percent-encodée
RFC: RFC 3986 section 3 définit les composants hiérarchiques d'URIEncodage des espaces (deux conventions)
Segment de chemin: %20 (conforme à la RFC 3986)
Chaîne de requête : + (convention historique des formulaires HTML)
Exemple : /search for me -> /search%20for%20me
Exemple : q=hello world -> q=hello+world
Les deux décodent au même résultat ; encodeURI utilise %20, encodeURIComponent utilise %20 pour le chemin et + pour la chaîne de requête dans certaines implémentationsFAQ
Que fait l'encodage URL ?
Il remplace les caractères non sûrs dans les URL par des séquences % : espace → %20, & → %26, # → %23, etc. La RFC 3986 liste les caractères sûrs (alphanumériques plus -, _, ., ~) et ceux qui doivent être encodés. Les navigateurs, serveurs et bibliothèques HTTP appliquent ou attendent tous l'encodage URL aux bonnes frontières.
Quelle est la différence entre encodeURI et encodeURIComponent ?
encodeURI conserve les caractères de syntaxe URL (: / ? # & =) intacts — il s'attend à une URL entière. encodeURIComponent les encode aussi — il s'attend à une valeur de paramètre. La page expose les deux modes ; choisissez l'encodage component pour les paramètres de requête et l'encodage URI pour les URL entières.
Pourquoi l'espace devient-il parfois %20 et parfois + ?
%20 est le standard URI. + est la convention héritée pour le type MIME application/x-www-form-urlencoded utilisé par les soumissions de formulaires HTML. Ils paraissent identiques pour la plupart des serveurs mais ne sont pas strictement équivalents — dans les URL modernes, utilisez %20.
Dois-je encoder les caractères Unicode ?
La RFC 3986 n'autorise que l'ASCII ; le non-ASCII doit être encodé en UTF-8 puis échappé en pourcentage (中 → %E4%B8%AD). Les navigateurs modernes affichent la forme Unicode dans la barre d'adresse mais envoient la forme encodée sur le réseau. La page effectue automatiquement l'étape d'encodage UTF-8.
Quels caractères ne doivent jamais être encodés ?
Les caractères non réservés selon la RFC 3986 : A-Z, a-z, 0-9, -, _, ., ~. Les encoder est techniquement autorisé mais produit une chaîne URL différente ; les serveurs peuvent traiter « a » et « %61 » comme équivalents ou différents selon les règles de canonicalisation.
Pourquoi mon URL décodée a-t-elle des caractères bizarres ?
Probablement double-encodée : %2520 décode en %20, puis en espace — ce qui signifie que quelqu'un a encodé l'URL deux fois. Décodez-la deux fois dans ce cas. Certains serveurs double-encodent automatiquement ; vérifiez le comportement d'encodage de votre client.
L'encodage est-il effectué localement ?
Oui. encodeURIComponent et decodeURIComponent s'exécutent dans votre navigateur. Les URL ne sont pas téléversées.