Outils Malins

URL encode / decode

Encodez ou décodez un texte pour usage en URL. encodeURIComponent (paramètres) vs encodeURI (URL complète).

URL encode / decode

Pourquoi encoder une URL ?

Les URL sont normées par la RFC 3986 et ne peuvent contenir que des caractères ASCII non-réservés (lettres, chiffres, et quelques signes : - _ . ~). Tous les autres — espaces, accents, &, ?, /, etc. — doivent être encodés en séquences %XX où XX est la valeur hexadécimale de l'octet UTF-8.

encodeURIComponent vs encodeURI

FonctionEncodeQuand l'utiliser
encodeURIComponentTout sauf A-Z, a-z, 0-9, - _ . ! ~ * ' ( )Fragment de paramètre (valeur après =)
encodeURIIdem + préserve / : ? & # = +URL complète, en préservant sa structure

Exemple. URL avec paramètre contenant un & :?query=tom&jerry. Si on encode tout le paramètre avec encodeURIComponent, on obtient tom%26jerry — correct. Avec encodeURI, on obtient tom&jerry — bug, le serveur croit qu'il y a deux paramètres.

Table de référence

CaractèreEncodage
Espace%20
é%C3%A9 (UTF-8 sur 2 octets)
%E2%82%AC
&%26
=%3D
?%3F
#%23
/%2F

%20 vs + (application/x-www-form-urlencoded)

Dans le corps d'un formulaire HTML (envoyé en POST avec Content-Type: application/x-www-form-urlencoded), l'espace est traditionnellement encodé en + et non en %20. Cette convention vient des formulaires de 1993. Aujourd'hui, %20 est accepté partout, mais + reste utilisé en query string par défaut côté serveur.

Pièges courants

  • Double-encodage : %20 ré-encodé devient %2520. À éviter !
  • Confusion entre URL et query body : espace = %20 ou + selon contexte.
  • Caractères Unicode : 1 caractère peut être encodé sur plusieurs octets (chaque octet = %XX).
  • Slash dans une clé d'API : encodeURIComponent obligatoire pour éviter l'interprétation comme segment d'URL.

Questions fréquentes

encodeURIComponent ou encodeURI ?

Component pour un paramètre, URI pour une URL complète.

Espace = %20 ou + ?

%20 dans une URL, + dans un body de formulaire. %20 toujours accepté.

Accents encodés ?

Oui, en UTF-8 (é = %C3%A9). Les ASCII purs ne sont jamais touchés.

Double-encodage ?

Erreur. Décoder avant ré-encoder si doute.

Caractères jamais encodés ?

A-Z, a-z, 0-9, - _ . ~

Outils complémentaires

Sources