Code

Guide de l’encodeur et du décodeur URL : encodage pourcent, espaces et UTF-8

ToolMellow ·

L’encodage URL représente certains octets par des séquences d’échappement avec un signe pourcent, afin que le texte convienne à la partie prévue d’une URL ou à une valeur de formulaire. ToolMellow propose trois types : Composant URL, Valeur de formulaire et URL complète. Collez le texte, choisissez le type, puis appuyez sur Encoder ou Décoder. La conversion est locale : elle n’ouvre pas l’adresse, ne la récupère pas par le réseau et ne la valide pas.

Le bon résultat dépend de l’usage du texte. Une valeur de requête, une chaîne de requête complète et une URL déjà assemblée sont des entrées différentes. Ce guide donne des exemples précis, explique UTF-8 et les erreurs courantes et vous aide à éviter de modifier les séparateurs ou de décoder plus de couches que prévu. Les adresses et sorties d’exemple sont des illustrations, pas des ressources récupérées.

Encodeur et décodeur URL

Comment encoder ou décoder du texte URL

Ouvrez l’encodeur et le décodeur URL et collez la valeur entière à transformer. Dans Type d’encodage, sélectionnez Composant URL (%20 pour les espaces), Valeur de formulaire (+ pour les espaces) ou URL complète (conserver les séparateurs). Encoder et Décoder agissent sur toute l’entrée de l’éditeur ; la saisie seule ne la convertit pas.

Lisez la sortie avant de choisir Copier le résultat ou Télécharger. Utiliser le résultat comme entrée permet d’appliquer une autre opération lorsque le résultat respecte la limite d’entrée. Modifier l’entrée ou le type d’encodage efface l’ancien résultat. Retour à la ligne change uniquement la présentation : il n’ajoute pas de sauts de ligne et ne modifie pas les échappements pourcent.

  • Pour une seule valeur de requête ou un segment de chemin, choisissez le mode de composant plutôt que d’encoder une requête entière déjà assemblée.
  • Utilisez le mode de valeur de formulaire uniquement lorsque le format destinataire attend les règles de valeurs d’application/x-www-form-urlencoded.
  • Pour une adresse déjà assemblée dont les séparateurs doivent garder leur sens, envisagez le mode d’URL complète ; ce n’est toujours pas un analyseur ni un validateur d’URL.

Choisir un composant, une valeur de formulaire ou une URL complète

Encoder un composant empêche la ponctuation réservée d’une valeur de jouer le rôle de structure URL. Le mode de valeur de formulaire applique les règles d’encodage de formulaire à une seule valeur et ne renvoie pas de nom de paramètre. Le mode d’URL complète conserve dans le texte des séparateurs comme les deux-points, la barre oblique, le point d’interrogation, l’esperluette, le signe égal et le marqueur de fragment.

Choisissez le type selon l’application destinataire, pas selon la sortie qui paraît la plus courte. Encoder une requête entière comme une seule valeur ou laisser des séparateurs apparents dans une valeur peut changer le sens. Cet outil ne découpe pas une requête collée en paires nom/valeur et ne détermine pas quelle partie relève de l’hôte, du chemin, de la requête ou du fragment.

Choisir un composant, une valeur de formulaire ou une URL complète
TypeEntrée utileLimite de l’implémentation
Composant URLUne valeur de requête ou un segment de cheminÉchappe la ponctuation réservée et ajoute un échappement strict pour cinq signes
Valeur de formulaireUne seule valeur encodée pour formulaireEncodage URLSearchParams ; décodage remplaçant le + littéral avant le décodage pourcent strict
URL complèteUne adresse déjà assembléeencodeURI/decodeURI ; son propre ensemble réservé, pas une validation complète d’URL

RFC 3986 : syntaxe URI, caractères non réservés et encodage pourcentWHATWG URL : analyse et sérialisation des formulaires encodés pour URLECMAScript : encodeURI et decodeURI

Ce que l’encodage pourcent fait aux octets

Une séquence d’échappement pourcent est un signe pourcent suivi de deux chiffres hexadécimaux représentant un octet. Un caractère Unicode peut demander plusieurs octets UTF-8 ; un seul caractère visible peut donc nécessiter plusieurs séquences. L’espace ASCII vaut 20 en hexadécimal et devient %20 dans l’encodage de composants ou d’URL complètes ; l’encodage de formulaire le représente par +.

Ces exemples fixes montrent pourquoi le type compte. Un plus littéral et un espace encodé sont des valeurs différentes. Dans la troisième ligne, la barre oblique et la ponctuation de requête sont des données de composant dans un cas et restent des caractères structurels en mode d’URL complète. Aucune des deux actions ne demande l’adresse au réseau.

Ce que l’encodage pourcent fait aux octets
Texte d’entréeSortie de composantSortie de valeur de formulaireSortie d’URL complète
a b+ca%20b%2Bca+b%2Bca%20b+c
cafécaf%C3%A9caf%C3%A9caf%C3%A9
a/b?x=1#parta%2Fb%3Fx%3D1%23parta%2Fb%3Fx%3D1%23parta/b?x=1#part
~*~%2A%7E*~*
😀%F0%9F%98%80%F0%9F%98%80%F0%9F%98%80

RFC 3986 : syntaxe URI, caractères non réservés et encodage pourcentWHATWG Encoding : UTF-8 et décodage de texteWHATWG URL : analyse et sérialisation des formulaires encodés pour URLECMAScript : encodeURI et decodeURI

Mode de composant et échappement strict

L’encodage de composants de ToolMellow utilise encodeURIComponent et échappe aussi !, l’apostrophe, (, ) et *. Son ensemble ASCII conservé littéralement comprend les lettres, les chiffres et -._~. Il se rapproche ainsi davantage de l’ensemble non réservé de RFC 3986 que encodeURIComponent sans modification, qui laisse ces cinq signes supplémentaires inchangés.

Par exemple, la valeur red&blue=1 devient red%26blue%3D1. Elle peut servir de valeur d’un paramètre sans que son esperluette devienne un autre séparateur de requête. Le décodage de composants utilise decodeURIComponent : il décode les caractères réservés échappés, tandis qu’un + littéral reste un plus. Il n’analyse pas les paires de requête et ne normalise pas une URL complète.

RFC 3986 : syntaxe URI, caractères non réservés et encodage pourcentECMAScript : encodeURIComponent et decodeURIComponent

Valeurs de formulaire : plus, espaces, tilde et astérisque

L’encodage d’une valeur de formulaire suit la sérialisation URLSearchParams pour une seule valeur. Un espace devient +, un plus littéral devient %2B et un astérisque littéral reste inchangé. Le tilde devient %7E. Ces différences sont attendues : l’encodage de formulaire a son propre ensemble autorisé, différent de celui du mode de composant.

Le décodage remplace d’abord les plus littéraux par des espaces, puis appelle decodeURIComponent avec ses règles strictes. Ainsi, a+b%2Bc devient a b+c : %2B devient un plus après le remplacement initial et n’est pas transformé en un second espace. Il s’agit d’un décodeur de valeur, pas de l’analyseur permissif de requêtes URLSearchParams. Les échappements mal formés et les octets échappés qui ne constituent pas de l’UTF-8 valide provoquent une erreur au lieu d’être réparés.

WHATWG URL : analyse et sérialisation des formulaires encodés pour URLECMAScript : encodeURIComponent et decodeURIComponent

Le mode d’URL complète conserve son ensemble de séparateurs

L’encodage d’URL complète utilise encodeURI. Il conserve les séparateurs d’une adresse assemblée tout en échappant les espaces et les autres caractères concernés. Par exemple, https://example.com/a b?q=a+b#part devient https://example.com/a%20b?q=a+b#part. Le plus reste un plus à cette étape ; la façon dont une application analyse ensuite la requête est une étape distincte.

Le décodage d’URL complète utilise decodeURI, qui conserve les échappements de son propre ensemble réservé ;/?:@&=+$,#. Par exemple, %2F, %26 et %23 restent échappés, tandis que %20 devient un espace. Cet ensemble ancien ne comprend pas tous les caractères réservés de RFC 3986 : %5B et %5D deviennent des crochets, et l’encodage d’URL complète échappe les crochets littéraux. Ce mode n’analyse pas une URL, ne valide pas un hôte ou un schéma, ne normalise pas un hôte IPv6, n’applique pas IDNA aux domaines et ne récupère pas l’adresse.

ECMAScript : encodeURI et decodeURIWHATWG URL : analyse d’URL, hôtes et URLSearchParamsRFC 3986 : syntaxe URI, caractères non réservés et encodage pourcent

UTF-8, Unicode et la distinction de l’entrée brute

L’encodage échappe les octets UTF-8 des caractères qui nécessitent un échappement. Dans café, la dernière lettre demande deux octets UTF-8 représentés par %C3%A9 ; l’emoji 😀 en utilise quatre. La limite de l’éditeur compte les unités de code UTF-16 de JavaScript : la longueur en octets, en unités de code et en caractères visibles peut donc différer. Cette conversion ne normalise pas le texte Unicode.

Tous les types d’encodage rejettent un substitut Unicode isolé. Le décodage d’URL complète vérifie également d’abord que l’entrée brute est un texte Unicode bien formé. Le décodage de composants et de formulaires n’effectue pas cette vérification séparée de la chaîne brute : des unités de code littérales non échappées peuvent passer telles quelles, tandis que les séquences d’octets échappés doivent produire de l’UTF-8 valide. Ne considérez pas un décodage réussi comme une validation générale de chaque caractère littéral ou comme la preuve qu’une URL est sûre.

ECMAScript : encodeURIComponent et decodeURIComponentECMAScript : encodeURI et decodeURIECMAScript : isWellFormed de StringWHATWG Encoding : UTF-8 et décodage de texte

Échappements mal formés, UTF-8 invalide et sorties inattendues

Un échappement exige exactement deux chiffres hexadécimaux après chaque signe pourcent, et les séquences d’octets échappés doivent respecter les règles UTF-8 du décodeur. Un signe pourcent littéral à encoder devient %25 ; un signe pourcent isolé dans l’entrée à décoder est une erreur. L’outil ne retire pas silencieusement les espaces blancs et ne décode pas plusieurs fois jusqu’à rendre le texte apparemment lisible.

Vérifiez le type et la valeur d’origine entière avant de changer des caractères. Les espaces bruts et les fins de ligne restent des données d’entrée et peuvent modifier un encodage. Si vous avez copié un attribut HTML, une chaîne JSON entre guillemets ou un corps de requête complet, analysez séparément ce format externe. Ses délimiteurs et règles d’échappement ne deviennent pas automatiquement des règles d’encodage pourcent.

Échappements mal formés, UTF-8 invalide et sorties inattendues
Entrée ou symptômeCauseProchaine vérification utile
% ou %2Échappement pourcent incompletVérifiez la valeur entière copiée
%GGChiffres d’échappement non hexadécimauxExaminez la source d’origine
%FFL’octet échappé n’est pas de l’UTF-8 valideIdentifiez l’encodage attendu ou le périmètre binaire
a+b conserve le plus en mode de composantUn plus littéral n’est pas un espace dans ce modeUtilisez le mode de formulaire seulement si le destinataire l’attend
Le décodage d’URL complète conserve %2FdecodeURI préserve ce séparateur réservéDécodez comme composant la valeur individuelle concernée

ECMAScript : encodeURIComponent et decodeURIComponentECMAScript : encodeURI et decodeURIRFC 3986 : syntaxe URI, caractères non réservés et encodage pourcent

Pourquoi %25 apparaît et quand un second décodage est incorrect

Encoder un signe pourcent déjà encodé crée une couche supplémentaire : encoder %2F en mode de composant donne %252F. Un seul décodage de composant de %252F renvoie %2F ; un deuxième renvoie /. Chaque étape transforme une couche d’encodage. La présence de %25 ne prouve pas à elle seule un défaut : une application peut volontairement transporter du texte encodé à l’intérieur d’une autre valeur.

Identifiez la couche attendue par votre application au lieu de décoder à répétition jusqu’à voir de la ponctuation. Un deuxième décodage de composant peut transformer des données en barre oblique ou en séparateur structurel. Le décodage d’URL complète peut volontairement conserver ces séparateurs échappés ; l’exemple de composant ne signifie donc pas que tous les modes retirent tous les échappements à chaque répétition. L’outil ne connaît pas les règles de routage ou d’autorisation d’une application.

RFC 3986 : syntaxe URI, caractères non réservés et encodage pourcentECMAScript : encodeURIComponent et decodeURIComponentECMAScript : encodeURI et decodeURI

Requêtes, segments de chemin et usage sûr dans une application

Pour un paramètre de requête, séparez le nom du paramètre et la structure de la requête de sa valeur. Une API de construction d’URL, comme URL et URLSearchParams, peut aider à assembler et sérialiser une véritable adresse. Cet outil transforme uniquement le texte fourni : il ne valide pas un nom d’hôte, ne raccourcit pas un lien, ne suit pas une redirection et ne décide pas quels schémas votre application doit autoriser.

L’encodage pourcent est une représentation réversible, pas un chiffrement, un hachage, un échappement HTML ou une autorisation. Encoder un schéma dangereux ne rend pas un lien digne de confiance, et décoder une valeur ne permet pas de l’insérer sans risque comme HTML ou code exécutable. Appliquez les règles de validation et d’échappement du contexte destinataire et évitez les véritables secrets dans les URL d’exemple partagées.

WHATWG URL : analyse d’URL, hôtes et URLSearchParamsWHATWG URL : analyse et sérialisation des formulaires encodés pour URLRFC 3986 : syntaxe URI, caractères non réservés et encodage pourcent

Limites d’entrée, croissance de la sortie et fichiers texte locaux

Le plafond d’entrée est de 1,000,000 unités de code UTF-16, pas un million d’octets UTF-8 ou de graphèmes affichés. L’échappement peut allonger la sortie : un million d’espaces ASCII produisent trois millions de caractères en mode de composant. Copier et Télécharger restent disponibles au-delà du plafond d’entrée, mais Utiliser le résultat comme entrée ne peut pas charger un résultat trop grand. La mémoire disponible dans le navigateur reste une limite pratique.

Ouvrir un fichier local utilise File.text() pour lire du texte UTF-8. Les fichiers de 4,000,000 octets ou plus sont rejetés ; le texte lu dépassant 1,000,000 unités UTF-16 est également rejeté. La lecture ordinaire supprime un BOM UTF-8 initial et remplace les séquences UTF-8 mal formées : ce n’est pas un encodage binaire qui préserve chaque octet ni un décodage dans un jeu de caractères arbitraire. Une extension de fichier ne prouve pas son encodage.

API File du W3C : lecture de Blob comme texteWHATWG Encoding : UTF-8 et décodage de texteECMAScript : isWellFormed de String

Copier, télécharger du texte, effacer et confidentialité

Télécharger enregistre le résultat comme texte UTF-8 dans toolmellow-result.txt, pas comme une requête, un rapport ou une page web ouverte. Une conversion vide réussie active aussi Copier le résultat et Télécharger. Si le presse-papiers est inaccessible, sélectionnez la sortie et copiez-la manuellement. Pour une vérification simple, encodez un texte connu, réutilisez le résultat s’il tient dans la limite, puis décodez avec le même type.

Effacer réinitialise l’entrée, le résultat, les erreurs, le contenu de recherche/remplacement et l’historique de l’éditeur, en conservant Type d’encodage et Retour à la ligne. Le contenu de travail reste dans la mémoire de la page au lieu d’être enregistré dans l’historique d’un compte. Actualiser ou fermer l’espace de travail abandonne cet état ; les fichiers téléchargés restent sur votre appareil. Effacer ne garantit pas une suppression forensique dans la mémoire du navigateur ou du système d’exploitation.

La conversion s’exécute dans un worker local du navigateur et n’envoie pas à un serveur de conversion le texte URL saisi, le contenu des fichiers sélectionnés ni les résultats. Charger le site transmet toujours des métadonnées ordinaires de requête à l’hébergement et utilise Google Analytics pour les visites, avec des cookies et des informations sur le navigateur et l’appareil. La conversion locale ne signifie ni anonymat, ni trafic nul, ni absence de journaux d’infrastructure ; consultez la page de confidentialité du site.

Intégrer l’encodeur et le décodeur URL avec un lien d’attribution

Choisissez la langue de la page et ouvrez la section d’intégration sous l’espace de travail. Copiez ou téléchargez l’extrait HTML fourni dans une zone du site qui autorise les iframes et scripts externes. Il contient l’iframe ToolMellow, le script d’ajustement de taille et un lien visible vers la page de l’outil ToolMellow dans la langue correspondante. Conservez ce lien d’attribution.

Prévisualisez l’intégration sur un écran étroit et vérifiez les autorisations du presse-papiers ainsi que la prise en charge des ressources externes par votre plateforme. L’intégration conserve les trois types, le périmètre textuel et les limites ; ce n’est ni une API de conversion côté serveur ni un service qui récupère des URL. Le lien fourni utilise nofollow et noopener ; sa présence ne garantit pas un meilleur classement dans les recherches.

Questions fréquentes

Comment encoder du texte pour une URL ?

Choisissez le type selon la destination : Composant URL pour une valeur individuelle ou un segment de chemin, Valeur de formulaire pour la sérialisation de formulaire ou URL complète pour une adresse assemblée dont les séparateurs doivent rester. Collez le texte et appuyez sur Encoder. L’outil n’ouvre pas l’adresse.

Comment décoder une valeur encodée pour URL ?

Choisissez le type correspondant et appuyez sur Décoder. Les modes de composant et de formulaire décodent strictement les octets UTF-8 échappés ; le formulaire transforme aussi d’abord les plus littéraux en espaces. Le mode d’URL complète conserve les échappements de son propre ensemble réservé. Il n’analyse pas la requête en paires.

Quand un signe plus représente-t-il un espace dans une URL ?

Dans cet outil, seul le décodage de Valeur de formulaire remplace les plus littéraux par des espaces. Composant URL et URL complète conservent les plus littéraux au décodage. L’analyse d’application/x-www-form-urlencoded a sa propre règle pour le plus ; elle n’est pas universelle pour chaque composant URL.

Quelle est la différence entre %20 et + ?

%20 est l’échappement pourcent de l’octet espace ASCII. La sérialisation de formulaire utilise le plus pour un espace et %2B pour un plus littéral. Le format destinataire détermine si un plus doit être interprété comme un espace.

Pourquoi le décodage d’URL complète conserve-t-il %2F ?

Ce mode utilise decodeURI et conserve les échappements de son propre ensemble ;/?:@&=+$,#, dont la barre oblique, l’esperluette et le marqueur de fragment. Il ne comprend pas tous les caractères réservés de RFC 3986 : les échappements de crochets deviennent des crochets. Le mode de composant décode aussi les échappements de ces séparateurs. Choisissez selon la partie visée de l’adresse et n’utilisez pas le mode d’URL complète pour normaliser un hôte IPv6.

En quoi cet outil diffère-t-il d’encodeURIComponent ?

Le mode de composant ToolMellow échappe également le point d’exclamation, l’apostrophe, les parenthèses et l’astérisque. Seuls les lettres, chiffres et -._~ restent littéraux. Les modes de formulaire et d’URL complète utilisent d’autres règles de sérialisation ; ce ne sont pas des alias interchangeables.

Pourquoi le décodage URL échoue-t-il ?

Les échappements incomplets ou non hexadécimaux et les octets échappés qui ne forment pas de l’UTF-8 valide provoquent une erreur. Vérifiez la valeur d’origine, le type attendu et le format externe. L’outil ne répare pas les échappements mal formés et ne choisit pas silencieusement un autre encodage de caractères.

L’outil valide-t-il toujours Unicode lors du décodage ?

Non. Le décodage d’URL complète vérifie que l’entrée brute est un texte Unicode bien formé ; les modes de composant/formulaire ne vérifient pas séparément les unités de code littérales non échappées. Les séquences d’octets échappés sont strictement décodées en UTF-8. Un décodage réussi n’est pas une validation complète d’URL.

Pourquoi mon URL contient-elle %25 ?

%25 représente un signe pourcent. Il peut apparaître lorsque du texte encodé est encodé à nouveau, par exemple quand %2F devient %252F en mode de composant. Déterminez la couche attendue ; décoder à répétition peut transformer des données en ponctuation structurelle.

Puis-je coller une requête entière dans Valeur de formulaire ?

L’outil la traite comme une seule valeur, pas comme une série de paires de paramètres. L’encodage échappe les séparateurs de cette valeur ; le décodage n’extrait pas les noms et valeurs. Utilisez un analyseur adapté d’URL ou de requête pour gérer la structure complète.

Puis-je encoder un fichier local ou réutiliser une grande sortie ?

Le sélecteur de fichiers lit du texte UTF-8 dans un fichier de moins de 4,000,000 octets et autorise jusqu’à 1,000,000 unités UTF-16 d’entrée. Ce n’est pas un encodage binaire brut. La sortie peut être plus grande et rester copiable/téléchargeable, mais une sortie trop grande ne peut pas être réutilisée comme entrée.

L’encodage URL est-il un chiffrement ?

Non. L’encodage pourcent est une représentation réversible et n’ajoute ni secret ni autorisation. Ce n’est pas non plus un hachage, un échappement HTML ou une garantie de sûreté d’une URL. Appliquez les règles de validation et d’échappement du contexte destinataire.

Puis-je intégrer l’encodeur et le décodeur URL sur mon site ?

Utilisez l’extrait HTML localisé sous l’espace de travail, conservez le lien visible vers ToolMellow et confirmez la prise en charge des iframes/scripts. L’intégration utilise les trois mêmes types et les limites locales de texte ; ce n’est ni une API de conversion côté serveur ni un service qui récupère des URL.

Sources et lectures complémentaires

Passez à la pratique.