Guide

Encodage URL : Guide Complet

L'encodage URL (également appelé encodage percent) est essentiel pour transmettre des données dans les URL. Comprendre quand et comment les caractères doivent être encodés prévient les liens brisés, les vulnérabilités de sécurité et les erreurs de transmission de données.

Pourquoi l'Encodage URL ?

Les URL ont été conçues pour le texte ASCII et ont des caractères réservés avec des significations spéciales. Le caractère ? démarre les chaînes de requête, & sépare les paramètres, = assigne des valeurs et # marque les fragments. Si vos données contiennent ces caractères, ils doivent être encodés pour éviter une mauvaise interprétation. Imaginez une recherche pour "Tom & Jerry". Sans encodage, ?q=Tom & Jerry traiterait le & comme un séparateur de paramètres, cassant la requête. Correctement encodé : ?q=Tom%20%26%20Jerry traite la chaîne entière comme une valeur. Les caractères non-ASCII doivent également être encodés. Les URL ne peuvent contenir que de l'ASCII. Les caractères internationaux comme ü, 漢, или doivent devenir des octets encodés en pourcentage pour apparaître dans les URL. Les espaces sont un cas spécial courant. Ils peuvent être encodés comme %20 ou parfois comme + (mais seulement dans les chaînes de requête). L'incohérence cause des bugs fréquents. Utilisez %20 pour la compatibilité la plus fiable. Les implications de sécurité sont significatives. Les entrées utilisateur non encodées dans les URL peuvent permettre des vulnérabilités XSS, des attaques par injection et une manipulation d'URL. Encodez toujours le contenu généré par l'utilisateur placé dans les URL.

Comment Fonctionne l'Encodage URL

L'encodage URL remplace les caractères non sûrs par un signe pourcent suivi de deux chiffres hexadécimaux. L'espace (ASCII 32, hex 20) devient %20. Le caractère & (ASCII 38, hex 26) devient %26. Pour les caractères UTF-8, le processus est : convertir le caractère en octets UTF-8, puis encoder chaque octet en pourcent. Le caractère ü est les octets UTF-8 C3 BC, donc il devient %C3%BC. Le chinois 中 est UTF-8 E4 B8 AD, donc il devient %E4%B8%AD. Les caractères sûrs qui n'ont pas besoin d'encodage sont A-Z, a-z, 0-9 et ceux-ci : - _ . ~ (bien que certaines implémentations les encodent aussi). Les caractères réservés qui doivent être encodés lorsqu'ils sont littéraux incluent : ! # $ & ' ( ) * + , / : ; = ? @ [ ]. Ceux-ci ont des significations spéciales dans les URL, donc leur utilisation littérale nécessite un encodage. Le double encodage est une erreur courante. Encoder une chaîne déjà encodée fait de %20 %2520. Décodez avant de réencoder ou suivez soigneusement l'état d'encodage.

Fonctions URL JavaScript

JavaScript offre plusieurs fonctions d'encodage URL avec des comportements différents. Choisir la mauvaise casse les URL ou expose des vulnérabilités. encodeURIComponent() est ce que vous voulez normalement. Il encode tout sauf A-Z a-z 0-9 - _ . ! ~ * ' ( ). Utilisez-le pour les valeurs de paramètres : '?name=' + encodeURIComponent(userInput). encodeURI() encode pour les URL complètes et laisse les caractères réservés comme : / ? & non encodés. Utilisez-le pour les URL entières : encodeURI('https://example.com/path?q=test'). Mais il ne gérera pas correctement les valeurs de paramètres contenant des caractères réservés. La différence critique : encodeURI('a&b') retourne 'a&b' (& reste). encodeURIComponent('a&b') retourne 'a%26b' (& est encodé). Pour la plupart des cas d'usage, encodeURIComponent est correct pour les valeurs. Pour décoder, utilisez decodeURIComponent() pour les valeurs individuelles et decodeURI() pour les URL complètes. Les fonctions legacy escape() et unescape() sont obsolètes et ne gèrent pas correctement l'Unicode. Ne les utilisez jamais dans du nouveau code.

Essayer l'Outil

Encodeur/Décodeur URL

Encodeur/Décodeur URL

FAQ

Encodeur/Décodeur URL

FAQ