Encoder et décoder une URL

Encodez ou décodez une adresse, une valeur de requête ou un corps de formulaire. UTF-8 correspond à encodeURIComponent. Changez l’encodage si l’autre côté n’est pas en Unicode.

Trois encodages, trois endroits dans l’adresse

Une barre dans le chemin doit rester une barre. Dans une valeur de paramètre, elle doit devenir %2F. Dans un formulaire, l’espace est un + ; dans une query, plutôt %20. Encoder toute l’adresse avec la mauvaise fonction ouvre la mauvaise page.

  • Une valeur correspond à encodeURIComponent. Mot-clé, identifiant, adresse de retour.
  • L’adresse entière correspond à encodeURI. : / ? # restent.
  • Corps de formulaire : l’espace devient un plus. C’est un corps POST, pas un lien.

Ce qui se trompe souvent

Un vrai plus dans une valeur doit être %2B, sinon le serveur lit un espace. & et = dans la valeur ouvrent le paramètre suivant. UTF-8 est le défaut et correspond à encodeURIComponent : chaque octet d’un accent devient % et deux chiffres hexa. « été » n’est donc pas un seul échappement. Si l’autre côté n’est pas en Unicode, changez l’encodage. Hex encode les octets bruts du champ.

N’encodez pas une adresse https:// déjà complète comme une valeur : les deux-points et les barres disparaissent. Encodez les morceaux, puis assemblez. Octets : chaîne vers octets. Autre écriture : Base64.

Questions

L’espace est devenu un plus

Vous êtes sur le corps de formulaire. Pour un lien, prenez la valeur seule.

Après décodage, il reste %20

La chaîne a été encodée deux fois. Décodez encore, jusqu’à ce que le texte se lise.