ToolActToolAct

Codeur/Décodeur URL

Encoder et décoder rapidement les URL avec plusieurs modes d'encodage

Entrée
Caractères: 0
Octets: 0
Sortie
Caractères: 0
Octets: 0

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

  1. Entrez ou collez le texte à encoder/décoder dans la zone de saisie
  2. Sélectionnez la méthode d'encodage : encodeURIComponent ou encodeURI
  3. Les résultats apparaissent automatiquement, copie en un clic ou échange entrée/sortie
  4. 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

Encoder des paramètres de requête en toute sécuritéUtilisez le mode encodeURIComponent lorsqu’une valeur sera placée dans un paramètre de requête URL, un segment de chemin ou un payload de type formulaire. Il encode les caractères réservés plus agressivement qu’encodeURI et affiche le nombre de caractères et d’octets. Le résultat correspond à ce que la plupart des parseurs côté serveur attendent après un point d’interrogation ou dans un segment JSON Pointer.
Encoder ou décoder des URL complètesBasculez vers encodeURI ou decodeURI lorsque vous travaillez avec une URL complète et que vous souhaitez que les séparateurs comme : / ? & conservent leur signification structurelle. Les modes composant et URI complète sont séparés pour éviter un sur-encodage accidentel. C’est le bon choix quand l’entrée ressemble déjà à une URL et que seules les parties utilisateur doivent être resserrées.
Récupérer du texte lisible à partir d’échappements pourcentDécodez des chaînes de composants ou d’URI complètes et basculez la sortie valide dans la saisie avec le mode inverse. Les erreurs de transformation provenant de séquences pourcent malformées sont affichées et bloquées, empêchant un %XX incomplet de contaminer un copier-coller ultérieur.
Inspecter des corps de formulaire encodésBasculez en vue application/x-www-form-urlencoded pour voir comment ‘+’ et ‘%20’ diffèrent pour les espaces, puis décodez un payload copié depuis les DevTools pour retrouver les clés d’origine. Utile aussi pour lire le corps d’une requête POST et confirmer que le formulaire a bien envoyé ce que le JavaScript client prévoyait.
Distinguer caractères réservés et non réservés selon RFC 3986Lors du débogage d’un désaccord de signature ou d’une erreur 400 d’une API stricte, la première étape est de vérifier si chaque octet appartient à l’ensemble réservé (gen-delims : / ? # [ ] @ et sub-delims !$&’()*+,;=) ou non réservé (A-Z a-z 0-9 - . _ ~). Les valeurs de requête utilisent l’encodage pourcent pour les caractères réservés, tandis que les segments de chemin traitent ‘/’ comme structurel.

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 formulaires

Encodage 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ête

Encodage 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'URI

Encodage 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émentations

FAQ

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.