Encodage URL
Encodez le texte destiné à une adresse web, ou transformez une adresse encodée en texte lisible.
0 Caractères · 0 Octets
Résultat
Comme partie isolée, la barre oblique et le point d’interrogation sont encodés aussi. Sans la case, la charpente de l’adresse est conservée et seuls les caractères interdits sont encodés.
Comment ça marche
Les adresses web ne peuvent contenir qu’un jeu limité de caractères. Tout le reste s’écrit comme un signe de pourcentage suivi de la valeur hexadécimale du caractère, et c’est pourquoi une espace devient %20.
La différence entre les deux modes tient à ce qui compte comme structure. Si vous encodez une partie isolée, la barre oblique, le point d’interrogation et le signe égal sont encodés aussi, parce qu’ils seraient sinon lus comme des parties de l’adresse.
Si vous encodez une adresse entière, ces caractères restent, pour que la charpente de l’adresse soit conservée. Ce mode sert pour une adresse déjà faite qui ne contient que des caractères isolés à encoder.
Si vous choisissez le mauvais mode pour un paramètre, le destinataire peut lire la valeur comme plusieurs paramètres. Une valeur qui doit suivre un signe égal se code presque toujours comme une partie isolée.
Le signe plus est un piège : dans la partie interrogative d’une adresse, le plus signifie historiquement une espace, alors que dans le chemin c’est un vrai signe plus.
Les fonctions derrière les modes
Le mode composant utilise les fonctions encodeURIComponent et decodeURIComponent de JavaScript, et le mode adresse complète encodeURI et decodeURI, toutes quatre définies dans la norme ECMAScript. Chaque caractère à encoder est d’abord converti en UTF-8, et chaque octet s’écrit sous la forme d’un signe pour cent suivi de deux chiffres hexadécimaux. En composant, café & crème 5 € devient ainsi caf%C3%A9%20%26%20cr%C3%A8me%205%20%E2%82%AC, où l’euro prend trois octets. En adresse complète, l’esperluette reste : caf%C3%A9%20&%20cr%C3%A8me%205%20%E2%82%AC. Un caractère qui ne peut pas s’écrire en UTF-8, comme une moitié isolée de paire de substitution laissée par un copier-coller tronqué, donne un message d’erreur au lieu d’un résultat.
Les caractères jamais encodés
ECMAScript laisse intacts dans les deux modes les lettres A à Z et a à z, les chiffres, le tiret bas, le trait d’union, le point, le point d’exclamation, le tilde, l’astérisque, l’apostrophe et les parenthèses. La RFC 3986 ne compte comme non réservés que le trait d’union, le point, le tiret bas et le tilde ; le point d’exclamation, l’apostrophe, les parenthèses et l’astérisque font partie des délimiteurs réservés et peuvent avoir un sens dans certaines adresses.
Le mode adresse complète laisse en outre le point-virgule, la barre oblique, le point d’interrogation, les deux-points, l’arobase, l’esperluette, le signe égal, le plus, le dollar, la virgule et le croisillon. Les crochets, en revanche, sont encodés : une adresse IPv6 dans une URL, comme http://[::1]:8080/, devient http://%5B::1%5D:8080/.
Les signes plus et les formulaires
Les formulaires sont encodés en application/x-www-form-urlencoded, où le WHATWG URL Standard écrit l’espace comme un signe plus et encode aussi le point d’exclamation, l’apostrophe, les parenthèses et le tilde. L’outil écrit toujours %20, et le décodage ne transforme pas le plus en espace : a+b reste a+b. Si le texte vient d’un formulaire, remplacez d’abord les signes plus par des espaces.
Erreurs de décodage
Le décodage exige de l’UTF-8 valide. %E9, qui est é dans l’ancien codage Latin-1, donne le message d’erreur, alors que %C3%A9 donne é. Un signe pour cent qui n’est pas suivi de deux chiffres hexadécimaux, comme à la fin de a%2, est aussi une erreur. En mode adresse complète, les délimiteurs encodés restent tels quels : a%2Fb reste a%2Fb, car une barre oblique décodée changerait la structure de l’adresse.