RevealTheme logo

Encodeur et décodeur d'URL

Convertissez du texte en encodage sécurisé pour les URL (encodage par pourcentage) et inversement. Utile pour les chaînes de requête, les redirections et les flux OAuth.

Qu'est-ce que l'encodage d'URL et quand en avez-vous besoin ?

L'encodage d'URL (aussi appelé « encodage par pourcentage », spécifié dans la RFC 3986) est le processus consistant à convertir les caractères qui ont une signification spéciale dans les URL — ou les caractères qui ne sont tout simplement pas sûrs dans les URL — en une séquence d'échappement hexadécimale « %XX ». La spécification des URL réserve certains caractères dotés d'une signification structurelle : « ? » introduit la chaîne de requête, « # » introduit le fragment, « & » sépare les paramètres de requête, « / » sépare les segments de chemin, etc. Si la saisie de l'utilisateur contient l'un de ces caractères et que vous l'intégrez tel quel dans une URL, l'analyseur l'interprète mal. L'encodage d'URL évite cela en remplaçant chaque caractère réservé ou non sûr par sa représentation hexadécimale en octets précédée de « % ». Un espace devient %20, « & » devient %26, « = » devient %3D. Les caractères non ASCII (cyrillique, chinois, emoji) sont convertis en séquences UTF-8 de plusieurs octets, chaque octet étant encodé par pourcentage. Les navigateurs gèrent cela automatiquement lorsque vous cliquez sur un lien, mais chaque fois que vous construisez une URL par le code — lors de la création d'une requête de recherche, d'une destination de redirection, d'un rappel OAuth ou d'une signature de webhook — vous devez d'abord encoder les valeurs fournies par l'utilisateur. Cet outil utilise les mêmes fonctions encodeURIComponent / decodeURIComponent que celles qu'utiliserait votre code JavaScript, de sorte que le comportement correspond exactement à celui de la production.

Cas d'usage courants

  • Encodez les termes de recherche de l'utilisateur avant de les ajouter à une URL de recherche (?q=saisie+utilisateur).

  • Transmettez en toute sécurité un paramètre redirect_uri OAuth à un serveur d'autorisation.

  • Construisez des URL de webhook incluant des charges utiles JSON encodées dans la chaîne de requête.

  • Encodez une URL 'returnTo' pour qu'elle survive à son passage à travers d'autres URL.

  • Décodez les valeurs encodées que vous voyez dans la barre d'adresse du navigateur après l'envoi d'un formulaire.

  • Testez l'analyse d'une URL mal formée : encodez un caractère spécial et observez ce qui se passe.

Questions fréquentes

Quand dois-je encoder une URL ?
Encodez toujours les valeurs fournies par l'utilisateur avant de les placer dans une URL : paramètres de requête, segments de chemin ou fragments. Ne pas encoder est l'une des sources les plus courantes de bogues subtils : la valeur « chats & chiens » casse une chaîne de requête tant qu'elle n'est pas encodée en « chats%20%26%20chiens ».
Quelle est la différence entre encodeURI et encodeURIComponent ?
encodeURI est destiné aux URL complètes : il laisse intacts les caractères structurels comme « / », « ? », « & », « = » car ils ont une signification dans une URL. encodeURIComponent est destiné aux parties d'URL (valeurs de requête, segments de chemin) : il encode tout ce qui n'est pas alphanumérique. Utilisez encodeURIComponent sur les valeurs de requête individuelles ; n'utilisez jamais encodeURI sur une valeur de requête fournie par l'utilisateur (il n'échappera pas « & » et cassera votre chaîne de requête).
Qu'est-ce que le Base64 sécurisé pour les URL par rapport à l'encodage d'URL ?
Ce sont des concepts distincts. L'encodage d'URL (cet outil) remplace caractère par caractère les caractères spéciaux. Le Base64 sécurisé pour les URL est une variante de Base64 qui utilise « - » et « _ » au lieu de « + » et « / », de sorte que le résultat est déjà sûr pour les URL sans encodage supplémentaire.
Pourquoi « + » est-il parfois décodé comme un espace ?
Dans application/x-www-form-urlencoded (envois de formulaires), « + » est l'abréviation d'un espace. La plupart des décodeurs conservent cela. Dans l'analyse d'URI moderne, « %20 » est l'encodage correct de l'espace. decodeURIComponent traite « + » comme un « + » littéral ; utilisez decodeURI ou un décodeur de formulaires pour convertir « + » en espace.
Comment les caractères non ASCII sont-ils encodés ?
Ils sont d'abord convertis en octets UTF-8, puis chaque octet est encodé par pourcentage. Ainsi, « café » devient « caf%C3%A9 » : « é » correspond à deux octets UTF-8 (0xC3 0xA9). Cet outil gère correctement l'UTF-8 ; certains anciens outils encodent en Latin-1, ce qui produit une sortie différente.
L'encodage d'URL est-il la même chose que l'encodage des entités HTML ?
Non. L'encodage d'URL (%XX) échappe les caractères pour les URL. L'encodage des entités HTML (&, <) échappe les caractères pour le balisage HTML. Les contextes sont différents ; encoder l'un dans le contexte de l'autre est une erreur courante à l'origine de failles XSS.

Outils connexes