Un mot français avec un accent, une cédille ou une apostrophe — "café", "garçon", "l'été" — ne peut pas apparaître tel quel dans une URL : chaque caractère hors de l'ensemble sûr, espace compris, doit être transformé en percent-encoding.
Pourquoi une apostrophe française pose problème
Chaque lettre accentuée est d'abord convertie en UTF-8 (2 octets pour é, è, ç), puis chaque octet devient %XX : "café" devient caf%C3%A9. L'apostrophe typographique ' (différente du guillemet simple ') pose un problème à part — copiée depuis un traitement de texte dans une URL, elle génère un caractère Unicode multi-octets bien plus long que l'apostrophe ASCII habituelle.
encodeURIComponent contre encodeURI
encodeURIComponent échappe presque tous les caractères à valeur structurelle — &, ?, =, / — c'est le bon choix pour une seule valeur, comme un terme de recherche inséré dans ?q=. encodeURI laisse ces caractères structurels intacts, car elle sert à encoder une URL complète déjà construite.
Une erreur fréquente avec les paramètres d'URL
Encoder toute la chaîne de requête d'un coup avec encodeURIComponent transforme aussi les & et = qui séparent les paramètres en %26 et %3D — le serveur reçoit alors un seul paramètre illisible au lieu de plusieurs valeurs distinctes. Il faut encoder chaque valeur séparément, jamais la chaîne entière.
Quand s'en servir
- Insérer un terme de recherche ou un nom de produit accentué dans un paramètre.
- Construire un lien avec des valeurs dynamiques (recherche, identifiants).
- Diagnostic : décoder une URL pour voir les données réellement encodées.
Cas limite : le double encodage
Si une chaîne déjà encodée en percent-encoding est encodée une seconde fois, le caractère % lui-même devient %25 — le résultat devient un charabia illisible (%C3%A9 devient %25C3%25A9). Cela arrive souvent quand un framework encode déjà l'URL automatiquement et que le code appelle en plus encodeURIComponent manuellement sur une valeur déjà encodée.