Encoder une URL
Encodez un texte en pourcent pour qu'il survive dans une URL. Il existe trois encodages différents pour trois usages différents, et choisir le mauvais casse les valeurs sans prévenir — la page vous indique donc celui qu'il vous faut.
- Jamais conservé
- Pas de file d'attente, pas d'attente
- Sans inscription, sans filigrane
Le résultat (Encodé) s'affiche ici.
Comment ça marche
Collez votre texte
N'importe quel texte, dans n'importe quelle langue. Il est encodé en UTF-8, ce qu'attend tout serveur moderne.
Choisissez l'usage
Une valeur destinée à une chaîne de requête, une URL complète déjà assemblée, ou l'envoi d'un formulaire. La différence compte, et chaque cas est expliqué.
Copiez le résultat
Encodez ligne par ligne si vous avez toute une liste à traiter d'un coup.
Trois réponses correctes, et pourquoi un seul bouton se trompe
L'encodage pourcent remplace un caractère par un % suivi de la valeur de son octet en hexadécimal. La spécification répartit les caractères en trois groupes, et tout ce qui prête à confusion en découle. Les caractères non réservés — lettres, chiffres, trait d'union, point, tiret bas et tilde — n'ont jamais besoin d'être encodés. Les caractères réservés — barres obliques, points d'interrogation, esperluettes, signes égal et deux-points qui donnent à une URL sa structure — doivent être encodés *quand ce sont des données* et ne doivent pas l'être *quand ils font partie de la structure*. Tout le reste est toujours encodé.
C'est pourquoi il n'existe pas de réponse unique. Encoder une URL entière doit laisser intacts les barres obliques et le point d'interrogation, sinon l'adresse cesse d'en être une. Encoder une valeur destinée à un paramètre de requête doit échapper les esperluettes et les signes égal, sinon une valeur qui en contient un se scinde en deux paramètres. Encoder un segment de chemin doit échapper les barres obliques, sinon un nom de fichier contenant une barre oblique devient deux dossiers. Un bouton « Encoder » unique choisit l'un de ces cas et se trompe les deux autres fois sur trois — généralement sans rien signaler, et généralement d'une manière qui n'apparaît qu'avec des données inhabituelles.
L'espace est le caractère le plus chargé d'histoire. Dans une URL, c'est %20. Dans un formulaire HTML envoyé, c'est un +, un encodage distinct et plus ancien qui perdure parce que les formulaires fonctionnent ainsi depuis 1994. Chacun est correct dans son contexte et aucun ne l'est dans l'autre : c'est pourquoi un signe plus dans une chaîne de requête est ambigu, d'une façon qu'aucune précaution côté encodage ne peut corriger.
Le texte non ASCII est d'abord encodé en UTF-8, puis octet par octet : une seule lettre accentuée devient ainsi deux séquences pourcent, et un emoji quatre. Le double encodage est le bug classique : encoder quelque chose de déjà encodé transforme chaque % en %25, si bien que %20 devient %2520 et que l'autre extrémité reçoit un signe pourcent littéral. Si une URL est remplie de %25, elle est passée par un encodeur de trop.
Si vous cherchez autre chose
Dans le code, utilisez la fonction propre au langage et choisissez-la aussi délibérément que cette page vous y oblige. JavaScript a encodeURI pour les adresses entières et encodeURIComponent pour les valeurs ; Python a urllib.parse.quote, avec un argument safe qui laisse par défaut les barres obliques intactes ; PHP distingue rawurlencode de urlencode, qui diffèrent précisément sur la question espace ou plus évoquée plus haut. Mieux encore, construisez vos URL avec un type URL plutôt qu'en concaténant des chaînes, et la question disparaît.
En ligne de commande, jq -rR @uri encode de façon sûre et gère une liste, et curl --data-urlencode construit un paramètre correctement encodé sans que vous ayez à vous demander dans lequel des trois cas vous êtes — c'est le seul endroit où c'est vraiment simple.
Questions fréquentes
Lequel des trois dois-je utiliser ?
« Une valeur », presque toujours. Utilisez-le quand vous encodez UNE valeur qui va être insérée dans une chaîne de requête ou un segment de chemin — un terme de recherche, une adresse e-mail, une cible de redirection. C'est le seul des trois qui échappe &, =, ? et /, ce qui empêche précisément votre valeur de sortir de son paramètre pour en former deux. Utilisez « Une URL complète » seulement quand vous avez déjà une URL entière et voulez juste nettoyer ses caractères non sûrs ; ce mode laisse volontairement intacts les caractères de structure pour que l'URL reste une URL. Utilisez « Données de formulaire » quand vous construisez un corps application/x-www-form-urlencoded, où une espace s'écrit + au lieu de %20.
Pourquoi mon « & » a-t-il cassé l'URL ?
Parce qu'il n'était pas encodé, et que & sert à séparer un paramètre du suivant dans une chaîne de requête. Une valeur « Smith & Sons » ajoutée telle quelle après ?company= arrive au serveur sous la forme company=Smith, plus un second paramètre vide nommé « Sons ». C'est le bug d'URL le plus courant, et l'encodage « Une valeur » le corrige — il transforme & en %26 pour que la valeur reste une seule valeur.
Pourquoi mon « + » est-il devenu une espace ?
Parce que dans une chaîne de requête, + signifie espace — une règle héritée des formulaires HTML que rien n'a jamais pu supprimer. Un signe plus littéral dans vos données, dans un numéro de téléphone ou une chaîne Base64, est donc lu comme une espace par le serveur qui le reçoit. L'encodage « Une valeur » l'échappe en %2B, qui arrive intact.
Gère-t-il les autres langues et les emoji ?
Oui. Le texte est d'abord converti en UTF-8, puis encodé en pourcent octet par octet, comme l'exige la RFC 3986 et comme l'attend tout serveur moderne. Japonais, arabe, latin accentué et emoji font l'aller-retour à l'identique.
Pourquoi ! ' ( ) * sont-ils encodés ici alors que d'autres outils les laissent ?
Parce que la fonction encodeURIComponent intégrée au navigateur laisse ces cinq caractères intacts, alors que la RFC 3986 les classe comme réservés. Certains serveurs et frameworks les traitent comme des caractères de structure : une valeur qui en contient peut donc être mal interprétée. Les encoder est sans conséquence — ils se décodent à l'identique partout — et élimine toute une catégorie de bugs rares et difficiles à diagnostiquer. C'est ce que font les implémentations soigneuses.
Mon texte est-il conservé quelque part ?
Non. Rien n'est conservé et aucune requête n'est effectuée. Vous pouvez vous déconnecter d'Internet une fois la page chargée : elle continue de fonctionner.
Bon à savoir : Il existe trois réponses correctes différentes, et la page vous demande de choisir, car l'habituel bouton unique « Encoder » se trompe deux fois sur trois. Encoder une URL entière, un paramètre de requête ou un segment de chemin n'échappe pas les mêmes caractères ; utiliser le mauvais mode casse sans prévenir les barres obliques, les signes plus ou les esperluettes.
Intégrez cet outil à votre site
Gratuit pour tout blog, page de cours ou article d'aide. Collez un seul extrait de code et vos visiteurs pourront l'utiliser directement sur votre page.
Voir aussi : Outils développeur
Décoder une URL
Retransformez %20 et consorts en texte
Encoder en Base64
Transformez un texte ou un fichier en Base64
Formateur JSON
Rendez lisible un JSON illisible
Décoder du Base64
Retrouvez le texte ou le fichier derrière du Base64
Générateur de QR code
Un QR code qui reste le vôtre
Générateur de code-barres
EAN, UPC, Code 128 — chiffres vérifiés