araç köşesi

Encoder et décoder une URL

Passer une adresse ou une valeur de formulaire en codage pourcent, ou la relire

Vos données restent chez vous. La conversion se fait dans le navigateur ; rien n'est envoyé à un serveur.

Comment ça marche

Collez le texte dans le panneau de gauche ; chaque ligne est traitée à part, une liste d'adresses passe donc en une seule fois. Choisissez d'abord le sens, ensuite la portée — c'est cette seconde décision qui rend le résultat utilisable ou non. Le mode composant code une valeur isolée : deux-points, barre oblique, point d'interrogation, esperluette et signe égal sont codés eux aussi, car à l'intérieur d'une valeur une barre oblique est du contenu et non un séparateur de chemin. Le mode adresse entière considère le texte comme une URL complète et laisse ces séparateurs en place ; seuls les caractères non sûrs, espace et lettres accentuées en tête, sont transformés. Le décodage garde exactement la même distinction. Si une séquence pourcent est cassée — %ZZ, ou un %A interrompu en fin de ligne — vous apprenez à quelle ligne et à quelle position elle se trouve ; une séquence formellement valide qui ne compose aucun caractère UTF-8 acceptable est signalée à part, parce que la cause n'est pas la même. Le résultat se copie d'un clic ou se télécharge en fichier texte.

Cet outil est aussi connu sous le nom de encoder une url, decoder une url, codage pourcent, url encode en ligne, caracteres speciaux dans une url, encodage des accents dans une adresse.

Qu'est-ce que Codage pourcent (percent-encoding) ?

Le codage pourcent représente les caractères qui n'ont pas le droit de figurer tels quels dans une adresse par un signe pourcent suivi de deux chiffres hexadécimaux : une espace devient %20, un point d'interrogation %3F. La norme des adresses n'autorise qu'un jeu de caractères restreint, parce que les autres soit jouent un rôle de séparateur (/, ?, &, =), soit sont interprétés différemment d'un système à l'autre. Ce ne sont pas des caractères qui sont codés mais des octets : le texte passe d'abord en UTF-8, puis chaque octet reçoit sa séquence. Une lettre accentuée en donne donc deux, et l'adresse codée paraît plus longue que le texte de départ.

Qu'est-ce que Chaîne de requête (query string) ?

La chaîne de requête est la partie d'une adresse qui suit le point d'interrogation ; elle transporte des paramètres jusqu'au serveur, sur le modèle ?q=plan&page=2. L'esperluette sépare les paramètres entre eux, le signe égal sépare le nom de la valeur. Comme ces deux signes portent un rôle structurel, ils doivent être codés dès qu'ils apparaissent à l'intérieur d'une valeur ; sinon le serveur lit deux paramètres là où vous en aviez écrit un, et la recherche revient vide. Les deux portées de cet outil naissent exactement de là : les valeurs passent par le composant, une adresse complète par l'adresse entière.

Quelle différence entre le mode composant et le mode adresse entière ?

Les deux appliquent le même codage pourcent ; ils se séparent sur le sort réservé aux séparateurs. Le mode composant ne connaît pas les adresses : il voit du texte et code tout caractère non sûr, y compris : / ? # & =, parce que ce texte deviendra une PARTIE d'adresse et qu'une barre oblique y est du contenu, pas un séparateur de chemin. Le mode adresse entière suppose qu'une adresse existe déjà, traite les séparateurs comme de la structure et les conserve ; seuls les caractères non sûrs, espace et lettres accentuées, sont transformés. En pratique : valeurs de formulaire et paramètres de requête par le composant, adresse existante à réparer par l'adresse entière. Intervertir les deux transforme soit une adresse en texte inutilisable, soit laisse un séparateur au milieu d'une valeur et coupe vos données en deux.

L'erreur la plus fréquente : coder une adresse entière en mode composant

Passez une adresse complète par le mode composant et https://exemple.com/chemin devient la chaîne https%3A%2F%2Fexemple.com%2Fchemin. Cette sortie n'est pas cassée — elle n'est simplement plus une adresse, mais une valeur qui transporte une adresse sous forme de texte. Collée dans la barre d'adresse d'un navigateur, elle n'ouvre rien.

La règle tient en une question : codez-vous une PARTIE d'adresse ou l'ADRESSE ENTIÈRE ? Le terme de recherche « café à emporter », destiné à un paramètre q, relève du mode composant. Une adresse déjà formée qui contient des espaces et qu'il faut rendre valide relève du mode adresse entière.

Ce qui change et ce qui reste

Dans les deux portées, les lettres, les chiffres et les signes - _ . ! ~ * ' ( ) restent tels quels, et une espace devient toujours %20. Tout ce qui sort de l'ASCII pur est d'abord découpé en octets UTF-8, et chaque octet reçoit sa propre séquence : é devient %C3%A9, à devient %C3%A0, ç devient %C3%A7. Qu'une adresse codée paraisse plus longue que le texte de départ est donc normal et ne signale aucune erreur.

  • Codés en mode composant : : / ? # [ ] @ ! $ & ' ( ) * + , ; = — c'est-à-dire presque tout
  • Conservés en mode adresse entière : : / ? # [ ] @ & = + $ , ;
  • Si la valeur d'un paramètre contient elle-même & ou =, le mode composant est obligatoire, sinon le serveur lit deux paramètres au lieu d'un
  • Un nom de fichier contenant une barre oblique relève lui aussi du mode composant

Ce que le navigateur affiche n'est pas ce qu'il envoie

Les navigateurs récents décodent les séquences pourcent dans la barre d'adresse et les affichent en clair ; exemple.com/café-du-port a donc l'air propre alors que la requête est arrivée codée au serveur. Copiez ce même lien dans un e-mail ou un message et c'est en général la longue version codée qui réapparaît — le lien n'a pas changé, seulement son affichage.

Pour comprendre un lien qui semble cassé, le sens décodage est le chemin le plus court : collez l'adresse illisible et lisez quel paramètre porte quoi. Le nom de domaine, lui, suit d'autres règles : un domaine accentué comme café.fr est représenté par un procédé distinct appelé punycode, et cet outil ne touche pas à la partie domaine.

Table du codage pourcent : ce que devient chaque caractère

Les correspondances ci-dessous figurent dans la norme des adresses, la RFC 3986, et sont les mêmes partout : un caractère s'écrit avec un signe pourcent suivi de deux chiffres hexadécimaux qui donnent sa valeur UTF-8. Une espace devient %20, parce qu'une adresse n'a aucune place pour une espace ; les autres sont codés parce qu'ils portent une structure — une esperluette brute dans la valeur d'un paramètre annonce au serveur qu'un nouveau paramètre commence.

La liste montre ce que produit la portée « composant ». En portée « adresse entière », ces mêmes caractères restent intacts, puisqu'ils y forment l'ossature de l'adresse au lieu d'être enfermés dans une valeur ; la section précédente dit laquelle des deux portées va où. Les lettres, les chiffres et quatre signes — trait d'union, point, tiret bas, tilde — sont dits « non réservés » dans la norme et ne sont codés dans aucune portée.

Autrement dit, cette table n'est pas un exercice de mémoire mais une liste de contrôle : quand un lien arrive cassé, vous y trouvez le caractère resté brut ou mal décodé.

  • espace → %20
  • ! → %21
  • " (guillemet droit) → %22
  • # → %23
  • $ → %24
  • % (le signe pourcent lui-même) → %25
  • & → %26
  • ' (apostrophe) → %27
  • ( → %28 et ) → %29
  • * → %2A
  • + → %2B
  • , (virgule) → %2C
  • / → %2F
  • : → %3A
  • ; → %3B
  • = → %3D
  • ? → %3F
  • @ → %40
  • [ → %5B et ] → %5D
  • retour à la ligne → %0A, tabulation → %09
  • Jamais codés : A-Z, a-z, 0-9 et quatre signes — trait d'union ( - ), point ( . ), tiret bas ( _ ), tilde ( ~ )
  • Les lettres accentuées occupent deux octets et donnent deux séquences : é → %C3%A9, è → %C3%A8, à → %C3%A0, ç → %C3%A7, ù → %C3%B9, ô → %C3%B4
  • L'œ lié en occupe deux également : œ → %C5%93

Questions fréquentes

Une espace devient-elle %20 ou un signe plus ?

Dans la partie chemin d'une adresse, une espace devient toujours %20. Le signe plus ne vaut espace que dans la chaîne de requête envoyée par un formulaire HTML ; c'est une convention ancienne propre à ce seul contexte. Cet outil produit %20 dans les deux portées, parce que %20 est lu correctement partout.

Une adresse peut-elle contenir des lettres accentuées ?

Dans le chemin et dans la requête, oui : elles y voyagent sous forme d'octets UTF-8 en séquences pourcent, é devenant %C3%A9. Le nom de domaine suit d'autres règles, celles du punycode, et cet outil laisse la partie domaine telle quelle.

Que se passe-t-il si je code une adresse deux fois ?

Le signe pourcent est alors codé à son tour et %20 devient %2520. C'est la cause classique d'un lien cassé. Dans le doute, lancez d'abord le sens décodage : si la sortie contient encore des séquences pourcent, le texte avait bien été codé deux fois.

Les adresses que je colle sont-elles envoyées quelque part ?

Non. L'encodage et le décodage ont lieu dans votre navigateur : même une adresse portant un jeton de session ou des paramètres personnels ne quitte pas cette page.

Comment s'écrit le signe pourcent lui-même ?

En %25. Ce n'est pas une exception mais le cœur de la règle : le signe pourcent ouvre une séquence d'échappement, il doit donc être codé partout où il apparaît comme texte ordinaire, sinon les deux caractères suivants sont pris pour des chiffres hexadécimaux. Au décodage, l'inverse s'applique et une séquence %25 redevient un simple signe pourcent.