Comprendre l'encodage d'URL et le percent-encoding
Ce que fait cet outil
Une URL ne peut transporter en toute sécurité qu'un ensemble limité de caractères. Tout ce qui sort des lettres, chiffres et quelques symboles non réservés doit être réécrit en percent-encoding : un signe % suivi de la valeur de l'octet en hexadécimal. Cet outil transforme du texte ordinaire en cette forme encodée et effectue aussi l'opération inverse, en rendant des séquences comme %20 et %26 aux caractères qu'elles représentent.
Deux types d'encodage couvrent les cas réels. L'encodage standard utilise encodeURIComponent de JavaScript : tout caractère est échappé, sauf les lettres, les chiffres et - _ . ! ~ * ' ( ), y compris les caractères structurants comme :, /, ?, # et &, ce qu'il faut pour un fragment isolé tel que la valeur d'un paramètre. L'encodage de formulaire suit la règle application/x-www-form-urlencoded utilisée par le navigateur lorsqu'il envoie un formulaire, et écrit un espace + au lieu de %20.
Quand l'utiliser
Optez pour l'encodage standard dès qu'une valeur s'insère dans une chaîne de requête : un terme de recherche, une adresse e-mail ou une cible de redirection contenant elle-même ?, & ou =. L'encoder empêche ces symboles d'être lus comme la structure de l'URL et de casser le lien. Comme tous les caractères structurants sont échappés, encodez les éléments d'une adresse un par un : encoder une URL complète échapperait aussi ses barres obliques et son point d'interrogation, ce qui n'est juste que si cette URL est elle-même une valeur à l'intérieur d'une autre. L'encodage de formulaire correspond au corps d'une requête POST ou à une charge de formulaire construite à la main, où les espaces s'écrivent + plutôt que %20. Le décodage est tout aussi fréquent : coller un lien encodé issu d'un journal, d'un rapport d'analytique ou d'une chaîne de redirections et lire vers quoi il pointe réellement.
Un exemple concret
Prenons le texte hello world & café. En encodage standard, un espace devient %20, l'esperluette devient %26 et café — puisque é est stocké sur deux octets UTF-8 — devient caf%C3%A9. En encodage de formulaire, ce même espace s'écrit +, ce qui donne hello+world. Une ligne de résumé compte combien de caractères ont changé et quelle part du texte cela représente.
Remarques et cas particuliers
Les caractères réservés (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) ont un sens à l'intérieur d'une URL. Les deux types échappent : / ? # [ ] @ $ & + , ; = et laissent ! ' ( ) * tels quels : encodez donc une valeur avant de la placer dans une chaîne de requête, pas l'URL terminée. L'encodage est défini sur des octets UTF-8, si bien que tout caractère non ASCII se déploie en plusieurs groupes %XX. Évitez d'encoder une URL deux fois : un % isolé faisant déjà partie d'une séquence d'échappement devient %25 et le lien cesse de fonctionner. En cas de doute, décodez d'abord pour vérifier si le texte est brut ou déjà échappé.