Encoder / Décoder URL

Encodez ou décodez des composants d'URL.

...

Pourquoi les URL ont besoin d'encodage

Une URL ne peut contenir qu'un ensemble limite de caracteres ASCII. Tout le reste — espaces, trémas, emoji, et les caracteres a signification speciale comme &, = et ? — doit etre encode en pourcent : chaque octet de la representation UTF-8 du caractere devient % suivi de deux chiffres hexadecimaux. Sautez cette etape et une requete de recherche comme coffee & cream casse silencieusement votre chaine de requete : le & demarre un nouveau parametre et la moitie de votre valeur disparait.

Cet outil utilise encodeURIComponent, la variante stricte destinee aux parties individuelles d'une URL. coffee & cream devient coffee%20%26%20cream, et le decodage l'inverse exactement.

Caracteres courants et leurs encodages

CaractereEncodePourquoi c'est important dans une URL
espace%20Les espaces terminent l'URL dans de nombreux contextes
&%26Separe les parametres de requete
=%3DSepare le nom et la valeur d'un parametre
?%3FDemarre la chaine de requete
#%23Demarre le fragment — tout ce qui suit est retire des requetes
/%2FSeparateur de segment de chemin
+%2BDecode comme un espace dans les donnees de formulaire s'il reste brut
ü%C3%BCNon-ASCII — deux octets en UTF-8, deux sequences %-

encodeURI vs. encodeURIComponent

JavaScript livre deux encodeurs, et les confondre est un bug classique. encodeURI est pour une URL complete : il laisse :, /, ?, # et & intacts pour que la structure de l'URL survive. encodeURIComponent — ce qu'utilise cet outil — est pour une valeur unique a l'interieur d'une URL et encode tous ces caracteres. Regle empirique : vous construisez un parametre de requete ? Toujours encodeURIComponent. Vous encodez une URL entiere qu'on a tapee ? encodeURI. Si vous encodez une URL complete avec la variante component, le https%3A%2F%2F en tete vous indique ce qui a mal tourne.

Pieges a connaitre

  • Double encodage : encoder deux fois transforme %20 en %2520. Si vous voyez des sequences %25 dans la nature, quelque chose a encode un texte deja encode.
  • Decoder une entree invalide : un % isole non suivi de deux chiffres hexadecimaux (comme 100% legit) echoue au decodage — l'outil le signale au lieu de deviner.
  • + n'est pas toujours un espace : uniquement dans les donnees de formulaire application/x-www-form-urlencoded. decodeURIComponent laisse correctement + comme +.

Tout tourne entierement dans votre navigateur — aucune URL que vous collez n'est jamais envoyee a un serveur. Outils connexes : echappez du texte pour du balisage avec l'encodeur HTML, ou construisez des chemins d'URL propres avec le generateur de slug.

Foire aux questions

Quels caracteres sont encodes en URL ?
Tout sauf les lettres, les chiffres et - _ . ~ est converti en sequences %- : l'espace devient %20, & devient %26, et les caracteres non-ASCII deviennent une sequence %- par octet UTF-8 (ü → %C3%BC).
Quelle est la difference entre encodeURI et encodeURIComponent ?
encodeURI encode une URL complete et preserve les caracteres structurels comme :, /, ?, #. encodeURIComponent (utilise par cet outil) encode une valeur unique et echappe aussi ceux-la. Utilisez la variante component pour les parametres de requete.
Pourquoi %20 apparait-il parfois comme + a la place ?
Les soumissions de formulaire HTML (application/x-www-form-urlencoded) encodent historiquement les espaces en +. L'encodage pourcent propre utilise %20. Les deux signifient "espace" dans les chaines de requete, mais %20 est le choix sur et universel.
Qu'est-ce que le double encodage ?
Passer un texte deja encode a nouveau dans l'encodeur : %20 devient %2520 car le % lui-meme est encode. C'est un bug frequent quand plusieurs couches d'un systeme encodent chacune. Encodez exactement une fois, au dernier moment.
Pourquoi le decodage de ma chaine echoue-t-il ?
Un % non suivi de deux chiffres hexadecimaux est un encodage pourcent mal forme — "100% legit" ne peut pas etre decode. Corrigez ou encodez d'abord le % brut en %25.