Guide12 min de lecture

Le guide complet de l'encodage d'URL

Découvrez tout sur l'encodage d'URL : ce que c'est, pourquoi c'est important, comment fonctionne le percent-encoding et les bonnes pratiques pour gérer les caractères spéciaux dans les URL.

Qu'est-ce que l'encodage d'URL ?

L'encodage d'URL, également appelé percent-encoding, est un mécanisme permettant d'encoder des informations dans un identifiant uniforme de ressource (URI) dans certaines circonstances. Bien qu'on le désigne sous le nom d'encodage d'URL, il est aussi utilisé plus largement au sein de l'ensemble principal des identifiants uniformes de ressource (URI), qui comprend à la fois les localisateurs uniformes de ressource (URL) et les noms uniformes de ressource (URN).

Cet encodage est nécessaire car les URL ne peuvent être transmises sur Internet qu'au moyen du jeu de caractères ASCII. Comme les URL contiennent souvent des caractères en dehors de l'ensemble ASCII, elles doivent être converties dans un format ASCII valide. L'encodage d'URL remplace les caractères ASCII non sûrs par un % suivi de deux chiffres hexadécimaux.

Comment fonctionne le percent-encoding ?

Le mécanisme du percent-encoding consiste à convertir chaque caractère devant être encodé en un ou plusieurs octets. Chaque octet est ensuite représenté par un signe pourcentage suivi de deux chiffres hexadécimaux. Ces chiffres hexadécimaux représentent la valeur de l'octet du caractère dans l'encodage spécifié (généralement UTF-8).

Par exemple, le caractère espace (valeur ASCII 32, hex 20) devient %20. L'esperluette & (valeur ASCII 38, hex 26) devient %26. Les caractères non-ASCII comme le e avec accent aigu sont d'abord encodés en leur séquence d'octets UTF-8, puis chaque octet est soumis au percent-encoding.

Caractères réservés et non réservés

La RFC 3986 définit deux catégories de caractères pour les URI : les caractères réservés et les caractères non réservés. Les caractères non réservés comprennent les lettres majuscules et minuscules (A-Z, a-z), les chiffres (0-9), les traits d'union (-), les points (.), les traits de soulignement (_) et les tildes (~). Ces caractères peuvent être inclus dans un URI sans être encodés.

Les caractères réservés ont une signification particulière dans la syntaxe des URL. Il s'agit notamment de : :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ; et =. Lorsque ces caractères sont utilisés dans un composant d'URI en dehors de leur rôle réservé, ils doivent être soumis au percent-encoding.

L'encodage d'URL dans différents langages

JavaScript

JavaScript fournit deux paires de fonctions pour l'encodage d'URL : encodeURI() / decodeURI() pour encoder des URI complets, et encodeURIComponent() / decodeURIComponent() pour encoder des composants d'URI individuels. La principale différence est que encodeURI() préserve les caractères réservés qui ont une signification particulière dans les URI (comme /, ?, #), tandis que encodeURIComponent() encode tous les caractères non alphanumériques.

Python

Le module urllib.parse de Python propose quote() et unquote() pour l'encodage/décodage de base, ainsi que urlencode() pour encoder des dictionnaires en chaînes de requête. La fonction quote() accepte un paramètre optionnel safe permettant de spécifier les caractères qui ne doivent pas être encodés.

PHP

PHP offre urlencode(), qui encode les espaces sous forme de + (conformément au format application/x-www-form-urlencoded), et rawurlencode(), qui encode les espaces sous forme de %20 (conformément à la RFC 3986). Pour le décodage, utilisez respectivement urldecode() et rawurldecode().

Bonnes pratiques

  • Encodez toujours les données saisies par l'utilisateur avant de les inclure dans des URL
  • Utilisez encodeURIComponent() pour encoder les valeurs des paramètres de requête en JavaScript
  • N'utilisez encodeURI() que pour encoder un URI complet
  • Restez cohérent dans votre approche de l'encodage tout au long de votre application
  • Décodez toujours les URL côté serveur avant de les traiter
  • Testez votre encodage avec des caractères spéciaux, y compris Unicode
  • N'encodez pas les URL deux fois -- vérifiez toujours si une chaîne est déjà encodée

Articles connexes

Essayez nos outils gratuits