Qu'est-ce que l'encodage URL (Percent-Encoding) ?
L'encodage URL, également appelé "percent-encoding", est un mécanisme utilisé pour convertir des caractères dans une URL en une représentation sécurisée pour la transmission sur internet. Certains caractères, comme les espaces, les symboles (&, ?, #, etc.) ou les lettres accentuées, ont une signification spéciale dans une URL ou peuvent causer des problèmes de transmission. L'encodage les remplace par un signe "%" suivi de deux chiffres hexadécimaux. Par exemple, un espace devient "%20".
Pourquoi ai-je besoin d'encoder ou de décoder une URL ?
L'encodage est nécessaire pour créer des URL valides et fonctionnelles. Vous en avez besoin lorsque vous construisez une requête web avec des paramètres (comme dans un formulaire GET), lorsque vous utilisez des caractères spéciaux dans un nom de fichier en ligne, ou pour éviter que des caractères comme "&" ou "?" ne perturbent la structure de l'URL. Le décodage est l'opération inverse, utile pour lire et comprendre une URL encodée reçue, par exemple dans les logs d'un serveur ou les données d'une application.
Quelle est la différence entre encoder et encoder pour URI complète ?
L'encodage standard (comme la fonction JavaScript `encodeURIComponent`) encode presque tous les caractères spéciaux, rendant une valeur sûre pour être incluse comme composant d'une URL (comme la valeur d'un paramètre). L'encodage pour URI complète (comme `encodeURI`) préserve l'URL fonctionnelle en n'encodant pas les caractères qui ont un rôle dans la structure de l'URL elle-même, comme ":", "/", "?", "&", "#", "@". Il encode uniquement les caractères qui pourraient rendre l'URL invalide, comme un espace dans le domaine. Utilisez le premier pour les valeurs, et le second avec prudence pour des URL entières déjà formées.
Les caractères alphabétiques et chiffres sont-ils encodés ?
Non, les caractères alphanumériques non accentués (A-Z, a-z, 0-9) ainsi que quelques caractères spéciaux considérés comme sûrs (tels que "-", "_", ".", "~") ne sont généralement pas encodés. L'encodage URL cible spécifiquement les caractères qui ne font pas partie de cet ensemble réservé, afin de garantir que l'URL reste lisible tout en étant techniquement correcte.
Comment encoder un caractère Unicode (comme un émoji) dans une URL ?
Les caractères Unicode qui ne font pas partie du jeu ASCII (comme les émojis, les lettres avec accents, les caractères chinois) doivent être convertis en séquences d'octets UTF-8, puis chaque octet doit être encodé au format pourcentage. Par exemple, l'émoji "😀" est d'abord converti en sa séquence d'octets UTF-8, puis encodé en "%F0%9F%98%80". Un bon outil d'encodage/décodage URL effectue automatiquement cette conversion en utilisant l'encodage UTF-8 par défaut.
Que se passe-t-il si je décode une chaîne qui n'est pas encodée ?
Si vous appliquez la fonction de décodage à une chaîne de caractères normale (non encodée), celle-ci restera largement inchangée. L'algorithme de décodage ne remplacera que les séquences valides commençant par "%" (comme "%20"). Les autres caractères, y compris le signe "%" s'il n'est pas suivi de deux chiffres hexadécimaux, seront laissés tels quels. Il n'y a généralement pas d'erreur, mais l'opération est inutile.
L'encodage URL est-il le même que l'encodage Base64 ?
Non, ce sont deux mécanismes totalement différents. L'encodage URL (percent-encoding) est conçu spécifiquement pour rendre une chaîne de caractères sûre pour une utilisation dans une URL. L'encodage Base64, quant à lui, est une méthode pour convertir des données binaires (comme une image) en une représentation textuelle utilisant 64 caractères ASCII. Base64 produit une sortie plus longue et contient souvent les caractères "+" et "/", qui doivent à leur tour être encodés en URL (en "+" → "%2B" et "/" → "%2F") pour être inclus sans problème dans une URL.