Encodeur & Décodeur URL

Convertissez vos URLs et paramètres avec le percent-encoding standard RFC 3986.

Texte original

Mode d'encodage

Actions

Résultat

Tableau de référence des encodages

espace%20
!%21
#%23
$%24
&%26
'%27
(%28
)%29
+%2B
,%2C
/%2F
:%3A
;%3B
=%3D
?%3F
@%40
é%C3%A9
à%C3%A0

Guide complet de l'encodage URL

Pourquoi l'encodage URL est nécessaire

En développant des applications web, je rencontre constamment le besoin d'encoder des URLs. Le protocole HTTP et la spécification des URLs (RFC 3986) définissent un ensemble restreint de caractères autorisés : lettres, chiffres, et quelques caractères spéciaux (-._~). Tout le reste : espaces, accents, symboles : doit être converti en séquences d'échappement %XX (percent-encoding).

Les trois fonctions d'encodage

encodeURIComponent()

Encode TOUS les caractères spéciaux. Utiliser pour les valeurs de paramètres de requête. Exemple : le paramètre search=café frappé doit encoder la valeur.

encodeURI()

Préserve les caractères structurels d'URL (://?#). Utiliser pour encoder une URL complète sans casser sa structure. N'encode pas les caractères réservés.

escape() [déprécié]

Ancienne fonction ne gérant pas l'UTF-8 correctement. Éviter pour les nouveaux développements. Conservé uniquement pour la compatibilité avec du code legacy.

Cas pratiques courants

  • Paramètres de recherche : ?q=café+au+lait encode les espaces et accents pour transmettre correctement la requête
  • URLs avec caractères non-ASCII : Les URLs contenant du chinois, arabe ou cyrillique nécessitent un encodage pour fonctionner
  • Données JSON dans l'URL : Passer du JSON via query string requiert un double encodage prudent
  • OAuth et tokens : Les access tokens contiennent souvent des caractères spéciaux à encoder
  • Redirection avec paramètres : L'URL de retour dans redirect_uri doit être entièrement encodée

Erreurs fréquentes à éviter

  • Encoder une URL complète avec encodeURIComponent : casse la structure (les :// deviennent %3A%2F%2F)
  • Oublier d'encoder les paramètres : provoque des erreurs 400 ou des injections de paramètres
  • Double encodage accidentel : transforme %20 en %2520, causant des bugs subtils
  • Utiliser + pour les espaces en dehors des formulaires : non standard, préférer %20
  • Encoder côté serveur et côté client : risque de double encodage

Questions fréquentes

Pourquoi l'espace devient parfois + et parfois %20 ?

Historiquement, les formulaires HTML utilisaient + pour les espaces (application/x-www-form-urlencoded). Le standard URL moderne (RFC 3986) utilise %20. Les deux sont généralement acceptés par les serveurs, mais %20 est plus universel. encodeURIComponent produit %20, tandis que les soumissions de formulaires natives utilisent +.

Comment encoder une URL contenant déjà des paramètres encodés ?

C'est un cas classique de double encodage. Si l'URL est déjà partiellement encodée, vous devez d'abord la décoder complètement, puis la ré-encoder. Par exemple, si vous passez une URL comme paramètre : décoder l'URL interne, construire votre URL finale, puis encoder le paramètre redirect_uri en entier. Sinon %20 devient %2520.

Les caractères chinois/japonais/arabes peuvent-ils être dans une URL ?

Oui, mais ils doivent être encodés en UTF-8 puis percent-encoded. Un caractère chinois occupe 3 octets UTF-8, donc devient 3 séquences %XX. Les navigateurs modernes affichent les caractères décodés dans la barre d'adresse pour la lisibilité, mais transmettent la version encodée. C'est pourquoi 中文 apparaît lisible mais est envoyé comme %E4%B8%AD%E6%96%87.

Quelle est la limite de longueur d'une URL ?

Le standard HTTP ne définit pas de limite, mais les navigateurs en imposent. Internet Explorer avait la limite la plus stricte (2083 caractères). Les navigateurs modernes acceptent généralement 32-64 Ko. Côté serveur, Apache limite par défaut à 8 Ko. Pratiquement, restez sous 2000 caractères pour la compatibilité universelle. Pour les données volumineuses, utilisez POST.

Comment gérer l'encodage URL en PHP/Python/Java ?

Chaque langage a ses fonctions natives. PHP : urlencode() et rawurlencode() (préférer raw). Python 3 : urllib.parse.quote() et quote_plus(). Java : URLEncoder.encode(str, "UTF-8"). Node.js : encodeURIComponent(). Attention : les fonctions *_plus() utilisent + pour les espaces (style formulaire), les autres utilisent %20.

Pourquoi mon URL décodée contient des caractères bizarres ?

Probablement un problème d'encodage de caractères (charset). L'URL était peut-être encodée en Latin-1 et vous la décodez en UTF-8, ou inversement. Les séquences %XX représentent des octets bruts : leur interprétation dépend du charset. Assurez-vous que l'encodeur et le décodeur utilisent le même charset, généralement UTF-8 en 2024.