BrowserTools
Publicité
Accueil / Encodeurs / Encoder / Décoder une URL

Encoder / Décoder une URL

Encodez ou décodez en pourcentage des URL et des paramètres de requête, modes sûr par composant et URI complète.

Chargement de Encoder / Décoder une URL… Si rien ne se passe, activez JavaScript.

L'encodage pour cent, communément appelé encodage d'URL, est le mécanisme défini dans le RFC 3986 pour représenter en toute sécurité des caractères arbitraires à l'intérieur d'un identifiant uniforme de ressource. Le système d'adressage d'internet a été conçu autour de l'ASCII, donc tout caractère hors d'un petit ensemble sûr (espaces, lettres accentuées, ponctuation, emoji ou binaire brut) doit être remplacé par un signe pour cent suivi de deux chiffres hexadécimaux représentant la valeur d'octet du caractère en UTF-8. Le schéma fait partie du web depuis que Tim Berners-Lee a défini les URL au CERN en 1990 et a été formellement normalisé dans le RFC 1738, plus tard remplacé par le RFC 3986 en 2005.

Exemples

Entrée hello world & co=1
Sortie hello%20world%20%26%20co%3D1

Encodage pour cent (encodeURIComponent) : l'espace devient %20.

Entrée hello world & co=1
Sortie hello+world+%26+co%3D1

Encodage de formulaire (application/x-www-form-urlencoded) : l'espace devient +.

Questions fréquentes

Mes données sont-elles téléversées vers un serveur ?
Non. L'encodage et le décodage se font entièrement dans votre navigateur à l'aide des fonctions intégrées de JavaScript encodeURIComponent, decodeURIComponent, encodeURI et decodeURI. Votre saisie ne quitte jamais votre appareil et aucune requête réseau n'est effectuée.
Quels caractères sont considérés comme « sûrs » et laissés non encodés ?
Le RFC 3986 définit les caractères non réservés (A-Z, a-z, 0-9, trait d'union (-), tiret bas (_), point (.) et tilde (~)) comme toujours sûrs et jamais encodés. En mode URI complète, les caractères structurels réservés (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) sont également préservés car ils portent un sens syntaxique dans une URL complète.
Quelle est la différence entre les deux modes ?
Le mode composant (encodeURIComponent) est conçu pour encoder des valeurs individuelles de paramètres de requête ou des segments de chemin. Il échappe tout sauf les caractères non réservés, donc une esperluette dans une valeur devient %26 et ne sera pas confondue avec un séparateur de paramètres. Le mode URI complète (encodeURI) est conçu pour les URL complètes : il préserve les caractères structurels réservés afin que l'URL reste valide et analysable après l'encodage.
Pourquoi un espace devient-il parfois + et parfois %20 ?
Cela dépend du contexte. Le format application/x-www-form-urlencoded, utilisé par les formulaires HTML, encode les espaces en + pour des raisons historiques. L'encodage pour cent strict défini par le RFC 3986 utilise %20 pour les espaces partout ailleurs, y compris dans les segments de chemin et les chaînes de requête modernes. En cas de doute, %20 est le choix sûr ; le + ne devrait être décodé comme espace qu'à l'intérieur d'un corps de formulaire, pas dans un chemin d'URL.
Y a-t-il des caractères qui ne peuvent jamais apparaître dans une URL même encodés ?
Tous les octets 0x00-0xFF peuvent être représentés dans une URL via l'encodage pour cent, donc techniquement toute séquence d'octets est exprimable. Cependant, des limites pratiques existent : les URL très longues (plus de 2000 caractères) peuvent être rejetées par les navigateurs, les serveurs ou les proxys. Les noms de domaine internationalisés (IDN) utilisent le Punycode plutôt que l'encodage pour cent pour la partie hôte d'une URL.
Cet outil gère-t-il correctement l'Unicode et les emoji ?
Oui. La fonction encodeURIComponent de JavaScript convertit les caractères en leur séquence d'octets UTF-8 avant d'encoder pour cent chaque octet, ce qui est le comportement correct selon le RFC 3986. Par exemple, le signe euro € (U+20AC) devient %E2%82%AC, les trois octets de son encodage UTF-8. Les emoji et tout autre point de code Unicode sont traités de la même manière.
Puis-je l'utiliser pour décoder une URL doublement encodée ?
Vous pouvez appliquer le décodage plusieurs fois en recollant la sortie comme entrée. Le double encodage se produit quand une chaîne déjà encodée est encodée de nouveau, transformant %20 en %2520 (le % lui-même devient %25). Si vous voyez des séquences littérales %25 dans une URL décodée, la valeur d'origine était doublement encodée et vous devez la décoder une seconde fois.
L'encodage d'URL est-il identique à l'encodage des entités HTML ?
Non. Ce sont des systèmes distincts. L'encodage d'URL utilise l'encodage pour cent (%20, %26, etc.) pour rendre les caractères sûrs dans les URI. L'encodage des entités HTML utilise des références nommées ou numériques (&,  , etc.) pour échapper les caractères ayant une signification spéciale dans le balisage HTML. On les confond parfois car les deux convertissent & en %26 dans une URL et en & en HTML, mais ils ne doivent jamais être mélangés.
Quelle est la différence entre un URI et une URL ?
Un URI (identifiant uniforme de ressource) est le concept le plus large : une chaîne qui identifie une ressource par nom, par emplacement ou les deux. Une URL (localisateur uniforme de ressource) est un type précis d'URI qui fournit le moyen de localiser la ressource ; elle comprend un schéma (https://), un hôte et un chemin. Dans le développement web courant, les termes sont employés indifféremment, mais techniquement toute URL est un URI, alors que tout URI n'est pas une URL.
Pourquoi encoder une chaîne déjà encodée produit-il une sortie illisible ?
Parce que le signe pour cent (%) est lui-même encodé en %25, encoder une chaîne déjà encodée transforme chaque séquence %XX en %25XX. Par exemple, %20 devient %2520. Décodez toujours d'abord si vous n'êtes pas sûr que la saisie est déjà encodée, plutôt que de l'encoder à nouveau. Le mode décodage de cet outil restaure la chaîne d'origine à partir d'un seul niveau d'encodage.

À propos de Encoder / Décoder une URL

L'encodage d'URL est incontournable dès que vous construisez ou analysez des adresses web par programmation. Les valeurs de chaîne de requête contenant des espaces, des esperluettes ou des signes égal casseraient l'analyse des paramètres si elles restaient non encodées. Les envois de formulaires utilisent par défaut application/x-www-form-urlencoded, qui encode tout en pourcentage et convertit les espaces en +. Les clients d'API REST doivent encoder les segments de chemin contenant des barres obliques ou des points d'interrogation pour que le serveur ne les interprète pas comme des caractères structurels. Les charges utiles de webhooks, les URI de redirection OAuth et les liens profonds reposent tous sur un encodage et un décodage soignés pour transmettre des données sans ambiguïté.

Cet outil gère l'encodage et le décodage pour cent entièrement dans votre navigateur. Il propose deux modes correspondant aux deux fonctions JavaScript standard. Le mode composant (équivalent à encodeURIComponent) est destiné aux valeurs individuelles (un terme de recherche, un nom de fichier, un paramètre OAuth) et échappe tout sauf les caractères non réservés A-Z, a-z, 0-9, trait d'union, tiret bas, point et tilde. Le mode URI complète (équivalent à encodeURI) préserve les caractères structurels d'une URL complète (deux-points, barre oblique, point d'interrogation, dièse, esperluette, égal) et est utile quand vous voulez normaliser une URL sans casser sa structure. Comme tout s'exécute localement, aucune saisie n'est jamais envoyée à un serveur.

Une erreur fréquente est d'encoder une URL entière avec encodeURIComponent : cela échappe les deux-points et les barres obliques, produisant une adresse cassée. Utilisez le mode composant uniquement sur les valeurs individuelles avant de les assembler en une URL. À l'inverse, oublier d'encoder des valeurs contenant & ou = dans les chaînes de requête conduit à des paramètres silencieusement scindés ou fusionnés du côté récepteur. Notez aussi que le caractère + signifie un espace uniquement à l'intérieur des corps application/x-www-form-urlencoded ; dans les segments de chemin, un + littéral doit être encodé pour cent en %2B.

D'où vient le nom de l'encodage pour cent

L'encodage pour cent tire son nom du signe pour cent (%) littéral qu'il utilise comme caractère d'échappement. Lorsque Tim Berners-Lee a défini la syntaxe des URL au CERN en 1990, il lui fallait un moyen de représenter des octets arbitraires de façon non ambiguë en texte ASCII. Il a choisi % parce qu'il était imprimable, rarement utilisé dans les identifiants et visuellement distinct, rendant les séquences encodées faciles à repérer d'un coup d'œil.

La spécification d'URL originale (RFC 1738, 1994) exigeait déjà l'encodage pour cent des caractères non sûrs, mais différents systèmes étaient en désaccord sur les caractères « non sûrs » et la gestion de l'Unicode. Il a fallu attendre 2005, et le RFC 3986, pour qu'un standard définitif émerge, accompagné d'un document complémentaire (RFC 3987) définissant les IRI (identifiants de ressource internationalisés), qui autorisent des caractères Unicode directement dans la syntaxe.

Aujourd'hui, pratiquement tous les langages de programmation livrent une fonction d'encodage d'URL dans leur bibliothèque standard, pourtant des différences subtiles subsistent : urlencode() de PHP encode les espaces en +, urllib.parse.quote() de Python utilise %20, et encodeURIComponent() de JavaScript suit le RFC 3986. Cette diversité explique pourquoi les intégrations d'API entre langages butent parfois sur des incohérences d'encodage : le même caractère peut paraître complètement différent selon la bibliothèque qui l'a sérialisé.

Publicité
Publicité
Publicité