Une valeur ou une adresse entière
Les deux modes se distinguent sur cinq caractères : &, =, ?, / et #.
Une valeur les échappe tous. À utiliser pour ce qui prend place à l’intérieur d’un paramètre : un terme de recherche, une cible de redirection. Placez une URL non échappée derrière ?next= et le & qu’elle contient sera lu comme le début d’un nouveau paramètre, tronquant votre valeur.
Adresse entière laisse intacts les caractères de structure. Ce mode sert quand vous disposez déjà d’une URL fonctionnelle et voulez seulement nettoyer les espaces et les caractères non ASCII. Une adresse complète y conserve les barres obliques de https://, et le lien continue de fonctionner.
Une règle tranche : vous construisez une partie d’adresse, prenez une valeur ; vous tenez déjà l’adresse, prenez adresse entière.
Les espaces : + ou %20
On rencontre les deux, mais ils n’occupent pas la même place. %20 est la forme standard, valable partout dans une URL. + vient de l’ancien encodage des formulaires HTML et ne vaut espace qu’à l’intérieur d’une chaîne de requête.
Un + dans un chemin est un vrai signe plus. Décoder un nom de fichier avec les règles des formulaires le renomme sans prévenir. Cet outil suit le standard et produit %20.
Valeurs encodées deux fois
Si un décodage laisse %2520 ou %253A, la valeur a été encodée deux fois : au second passage, le % lui-même est devenu %25.
Cela arrive quand du code encode une valeur qui l’était déjà. Décoder une fois de plus rend le texte, mais le vrai correctif consiste à décider où se fait l’encodage : une seule fois, à l’endroit où la valeur entre dans l’URL, et du texte brut partout ailleurs.
Les caractères qui ne bougent pas
A-Z, a-z, 0-9 ainsi que -, ., _, ~ forment l’ensemble non réservé : la spécification les déclare sûrs, ils passent donc tels quels. Les voir inchangés n’est pas un défaut.
Les caractères non ASCII s’étalent : une lettre accentuée pèse deux octets UTF-8, un caractère chinois trois, un émoji quatre, et chaque octet devient une paire %XX. Voilà pourquoi une adresse encodée paraît soudain si longue.