Encodage pourcent · Gratuit

Encodeur et décodeur d'URL

Il n'existe pas un seul encodage pourcent correct, et choisir le mauvais est ce qui casse discrètement une chaîne de requête. Voyez les quatre à la fois, décodez sans risque avec l'erreur nommée et localisée, et découpez n'importe quel lien en schéma, hôte, chemin, requête et fragment.

Encodé et analysé dans votre navigateur · Aucun lien n'est chargé
Signaler un problème

34 caractères s'encodent en 70 caractères avec l'encodage composant, sur 38 octets UTF-8.

Texte à encoder

Collez la valeur, pas le lien entier

Encoder une valeur n'est pas la même tâche qu'encoder une URL, c'est pourquoi quatre réponses apparaissent ci-dessous au lieu d'une.

34 sur 100,000 caractères

Rien n'est importé, et rien n'est chargé.

Quatre bonnes réponses

Le même texte, encodé de quatre façons défendables

Encodage composant · encodeURIComponent()
Caf%C3%A9%20cr%C3%A8me%20%26%20croissants%20%2F%20%C3%A9t%C3%A9%202026

Utilisez-le pour un seul élément d'une URL : une valeur de requête, un segment de chemin, un fragment. Il échappe les délimiteurs / ? : @ & = + $ et #, si bien qu'une valeur qui en contient ne peut pas sortir de son emplacement.

Encodage d'URL complète · encodeURI()
Caf%C3%A9%20cr%C3%A8me%20&%20croissants%20/%20%C3%A9t%C3%A9%202026

Utilisez-le sur une URL déjà assemblée. Il laisse intacts les délimiteurs réservés pour que la structure survive, et c'est aussi pourquoi il ne protège pas une valeur qui contient une esperluette.

Diffère ici de l'encodage composant
Encodage de formulaire · application/x-www-form-urlencoded
Caf%C3%A9+cr%C3%A8me+%26+croissants+%2F+%C3%A9t%C3%A9+2026

Ce que produisent un formulaire HTML et URLSearchParams. Un espace devient un signe plus au lieu de %20, et cette seule différence corrompt les données sans bruit quand les deux conventions se rencontrent.

Diffère ici de l'encodage composant
RFC 3986 strict · caractères non réservés uniquement
Caf%C3%A9%20cr%C3%A8me%20%26%20croissants%20%2F%20%C3%A9t%C3%A9%202026

Seuls les lettres, les chiffres et les quatre signes - . _ ~ survivent. Utilisez-le pour les signatures OAuth 1.0, AWS Signature Version 4 et partout où une signature doit correspondre octet pour octet.

Identique ici à l'encodage composant
34 caractères en entrée38 octets UTF-870 caractères en sortie16 séquences d'échappement
Vue des octets

Pourquoi la chaîne encodée est devenue si longue

Une séquence d'échappement transporte un octet, pas un caractère. Tout ce qui sort de l'ASCII devient deux, trois ou quatre séquences, si bien qu'un mot accentué peut tripler de longueur et qu'un emoji devient douze caractères.

Caractères
34
Unités UTF-16
34
Octets UTF-8
38
Hors ASCII
4
Caractère, point de code, octets UTF-8 et forme encodée en pourcent
CaractèrePoint de codeOctets UTF-8Encodé
CU+004343C
aU+006161a
fU+006666f
éU+00E9C3 A9%C3%A9
SPU+002020%20
cU+006363c
rU+007272r
èU+00E8C3 A8%C3%A8
mU+006D6Dm
eU+006565e
SPU+002020%20
&U+002626%26
SPU+002020%20
cU+006363c
rU+007272r
oU+006F6Fo
iU+006969i
sU+007373s
sU+007373s
aU+006161a
nU+006E6En
tU+007474t
sU+007373s
SPU+002020%20
/U+002F2F%2F
SPU+002020%20
éU+00E9C3 A9%C3%A9
tU+007474t
éU+00E9C3 A9%C3%A9
SPU+002020%20
2U+0032322
0U+0030300
2U+0032322
6U+0036366
Référence

Quel encodeur échappe quel caractère

La RFC 3986 divise l'ASCII en caractères non réservés, qui n'ont jamais besoin d'être échappés, et en caractères réservés, qui portent la structure et doivent donc être échappés lorsqu'ils apparaissent dans une valeur. Les lettres, les chiffres et les quatre signes trait d'union, point, tiret bas et tilde sont non réservés et ne sont modifiés par aucun encodeur de cette page, ils ne sont donc pas listés.

Chaque signe de ponctuation ASCII avec son groupe RFC 3986 et la façon dont chacun des quatre encodeurs l'écrit
CaractèreOctetRôleComposantURL complèteFormulaireRFC 3986
SP20Toujours échappéEspace%20%20+%20
!21Sous-délimiteurPoint d'exclamation!!%21%21
"22Toujours échappéGuillemet double%22%22%22%22
#23Délimiteur généralCroisillon, début du fragment%23#%23%23
$24Sous-délimiteurSigne dollar%24$%24%24
%25Toujours échappéSigne pourcentage, début d'une séquence d'échappement%25%25%25%25
&26Sous-délimiteurEsperluette, sépare les paramètres%26&%26%26
'27Sous-délimiteurApostrophe''%27%27
(28Sous-délimiteurParenthèse ouvrante((%28%28
)29Sous-délimiteurParenthèse fermante))%29%29
*2ASous-délimiteurAstérisque***%2A
+2BSous-délimiteurSigne plus%2B+%2B%2B
,2CSous-délimiteurVirgule%2C,%2C%2C
-2DNon réservéTrait d'union----
.2ENon réservéPoint....
/2FDélimiteur généralBarre oblique, sépare les segments du chemin%2F/%2F%2F
:3ADélimiteur généralDeux-points, suit le schéma%3A:%3A%3A
;3BSous-délimiteurPoint-virgule%3B;%3B%3B
<3CToujours échappéInférieur à%3C%3C%3C%3C
=3DSous-délimiteurÉgal, sépare la clé de la valeur%3D=%3D%3D
>3EToujours échappéSupérieur à%3E%3E%3E%3E
?3FDélimiteur généralPoint d'interrogation, début de la requête%3F?%3F%3F
@40Délimiteur généralArobase, fin des identifiants%40@%40%40
[5BDélimiteur généralCrochet ouvrant, entoure un hôte IPv6%5B%5B%5B%5B
\5CToujours échappéBarre oblique inversée%5C%5C%5C%5C
]5DDélimiteur généralCrochet fermant, entoure un hôte IPv6%5D%5D%5D%5D
^5EToujours échappéAccent circonflexe%5E%5E%5E%5E
_5FNon réservéTiret bas____
`60Toujours échappéAccent grave%60%60%60%60
{7BToujours échappéAccolade ouvrante%7B%7B%7B%7B
|7CToujours échappéBarre verticale%7C%7C%7C%7C
}7DToujours échappéAccolade fermante%7D%7D%7D%7D
~7ENon réservéTilde~~%7E~
Une cellule grisée signifie que le caractère est passé intact. Chaque ligne est générée en exécutant les quatre mêmes encodeurs que cette page, si bien que le tableau ne peut pas s'écarter de la sortie située au-dessus.
Comment ça marche

Un caractère, plusieurs bonnes réponses.

L'encodage pourcent remplace un caractère par un signe pourcentage suivi de la valeur hexadécimale de chacun de ses octets UTF-8. La difficulté n'a jamais été le mécanisme, c'est la question de savoir quels caractères remplacer, et il n'y a pas de réponse unique. Une barre oblique entre deux segments de chemin est de la structure et doit rester telle quelle ; la même barre dans un nom de fichier est une donnée et doit devenir %2F. Un espace vaut %20 selon la RFC 3986 et un signe plus dans l'encodage de formulaire qu'envoie réellement un navigateur. Un point d'exclamation traverse encodeURIComponent intact mais est échappé par un encodeur RFC 3986 strict, et c'est exactement pour cela qu'une signature OAuth calculée avec le mauvais encodeur échoue à la vérification. Cette page refuse de choisir à votre place : elle applique les quatre jeux de règles à la même saisie, indique pour chacun la situation à laquelle il correspond et vous laisse copier celui qui convient.

  1. 01

    Indiquez la tâche que vous effectuez

    Encoder une valeur n'est pas la même tâche qu'encoder une URL entière, et aucune des deux ne revient à démonter un lien. Choisissez encoder, décoder, analyser une URL ou l'éditeur de requête, et l'espace de travail s'adapte. Chaque tâche garde son propre texte, si bien que passer de l'une à l'autre ne fait rien perdre.

  2. 02

    Lisez toutes les réponses, pas une seule

    Le mode encodage affiche le même texte selon les quatre règles à la fois, chacune indiquant quand elle est la bonne et chacune copiable séparément. Le mode décodage affiche la lecture composant, la lecture formulaire où un signe plus est un espace, et un décodage répété qui indique combien de couches il a retirées. Le mode analyse découpe le lien en schéma, identifiants, hôte sous sa forme lisible et sous sa forme punycode, port, segments de chemin, paramètres de requête et fragment.

  3. 03

    Copiez l'élément voulu, ou reconstruisez le lien

    Chaque sortie a son propre bouton de copie : inutile de chercher dans un mur de texte. En mode analyse et dans l'éditeur de requête, vous pouvez modifier une valeur, ajouter un paramètre, en supprimer un ou changer l'ordre, et le lien est reconstruit à partir du tableau avec tout correctement réencodé.

Pour les redirections cassées, les paramètres abîmés et les liens suspects

Tous les encodages, un décodeur honnête et le lien entier démonté.

Quatre encodages à la fois, chacun avec son usage

L'encodage composant pour une valeur isolée, l'encodage d'URL complète pour un lien assemblé, l'encodage de formulaire pour tout ce qu'un navigateur envoie, et le RFC 3986 strict pour les signatures. Ils ne sont pas d'accord sur l'espace, le signe plus, la barre oblique, le point d'exclamation, l'apostrophe, le tilde et l'astérisque, et chacun de ces désaccords a déjà cassé la chaîne de requête de quelqu'un. Voir les quatre ensemble est plus rapide que de se rappeler quelle fonction fait quoi.

Un décodeur qui nomme l'erreur et la montre du doigt

La fonction intégrée du navigateur lève une simple URIError qui ne vous apprend rien. Celui-ci parcourt lui-même la chaîne et indique la position du caractère, la séquence fautive et la raison : un signe pourcentage sans chiffres hexadécimaux derrière, une paire qui n'est pas hexadécimale, un octet qui ne peut apparaître qu'au milieu d'un caractère, un encodage trop long, une moitié de paire de substitution ou un point de code au-delà de la fin d'Unicode. Un accent circonflexe (^) marque l'endroit exact.

Double encodage détecté et compté

%2520 est un espace passé deux fois dans un encodeur, et c'est la raison la plus fréquente pour laquelle un paramètre de redirection cesse de fonctionner. Le décodage répété continue jusqu'à ce que le texte ne change plus, indique combien de couches ont été retirées et liste chaque chaîne intermédiaire pour que vous voyiez où la passe en trop a été ajoutée.

Les deux formes d'un hôte internationalisé

Un domaine écrit en cyrillique, en grec ou en allemand avec des trémas est résolu sous forme punycode, et les deux formes sont affichées côte à côte. C'est la vérification qui démasque un lien homographe : l'hôte lisible paraît familier alors que la forme ASCII que reçoit réellement le DNS ne l'est pas. Le punycode est décodé ici, dans la page, car un navigateur n'offre à lui seul aucun moyen de revenir en arrière depuis la forme ASCII.

Un éditeur de requête qui respecte les clés répétées

tag=a&tag=b, ce sont deux valeurs, pas une, et un analyseur qui ne garde en silence que la dernière perd des données. Les paramètres sont listés sur des lignes séparées dans leur ordre d'origine, et vous pouvez les modifier, en ajouter, en supprimer et les réordonner, puis copier la chaîne reconstruite avec l'espace écrit comme un signe plus ou comme %20, selon ce qu'attend le système qui la reçoit.

Une vue des octets et un tableau de référence qui ne peuvent pas diverger

Une lettre accentuée devient deux triplets pourcent, un caractère CJK trois et un emoji quatre, ce qui explique qu'une chaîne encodée puisse être plusieurs fois plus longue que ce que vous avez tapé. La vue des octets le montre caractère par caractère, et le tableau de référence liste chaque signe de ponctuation ASCII avec son rôle selon la RFC 3986 et la façon dont chacun des quatre encodeurs l'écrit. Les deux sont générés par le même code que celui qui produit la sortie au-dessus d'eux.

Questions sur l'encodage

Signes plus, %2520, punycode et pourquoi le décodeur intégré lève une erreur.

Quelle est la différence entre encodeURI et encodeURIComponent ?+

encodeURIComponent encode un élément d'une URL et considère que cet élément est une donnée ; il échappe donc les délimiteurs qui donnent sa forme à une URL : la barre oblique, le point d'interrogation, le croisillon, l'esperluette, le signe égal, les deux-points, l'arobase, le signe plus et le signe dollar. encodeURI encode une URL déjà assemblée et considère que ces délimiteurs sont de la structure ; il les laisse donc tels quels. En pratique, vous voulez presque toujours la version composant, car vous construisez presque toujours une URL à partir d'éléments plutôt que de réparer une URL existante. Ne recourez à la version URL complète que lorsqu'on vous donne un lien complet contenant un espace ou un caractère accentué qu'il faut nettoyer.

Pourquoi un espace vaut-il tantôt %20, tantôt un signe plus ?+

Parce que deux normes ont été rédigées à des époques différentes et que les deux ont survécu. La RFC 3986, qui décrit les URL en général, encode un espace en %20 partout. Le format plus ancien d'envoi des formulaires HTML, application/x-www-form-urlencoded, encode un espace en signe plus, et c'est ce que les navigateurs envoient encore lorsqu'un formulaire est soumis et ce que produit URLSearchParams. Pratiquement tous les serveurs lisent correctement les deux dans une chaîne de requête, car les analyseurs de chaînes de requête connaissent les deux conventions. Les ennuis commencent quand une valeur encodée d'une façon est décodée de l'autre : décodez une valeur encodée en formulaire avec un simple décodeur pourcent, et un nom comme Anna Marie ressort sous la forme Anna+Marie. C'est pourquoi cette page affiche les deux lectures d'un décodage plutôt que d'en choisir une pour vous.

Que signifie %2520 ?+

Cela signifie un espace encodé deux fois en pourcent. Un espace devient d'abord %20. Si ce %20 repasse ensuite dans un encodeur, le signe pourcentage lui-même est encodé en %25 et vous obtenez %2520. Voir %25 suivi de deux autres chiffres hexadécimaux n'importe où dans un lien est l'empreinte d'un double encodage. Cela arrive généralement quand un paramètre de redirection est construit en encodant une URL déjà encodée, ou quand une valeur traverse deux frameworks qui l'encodent chacun par excès de zèle. Collez-la ici en mode décodage et le nombre de couches vous dit exactement combien de passes annuler.

Quels caractères faut-il vraiment encoder ?+

La RFC 3986 définit un ensemble non réservé qui n'a jamais besoin d'être échappé : de A à Z, de a à z, de 0 à 9, et les quatre signes trait d'union, point, tiret bas et tilde. Tout le reste relève de l'ensemble réservé, divisé en délimiteurs généraux (deux-points, barre oblique, point d'interrogation, croisillon, crochets, arobase) et sous-délimiteurs (point d'exclamation, dollar, esperluette, apostrophe, parenthèses, astérisque, plus, virgule, point-virgule, égal). Un caractère réservé est autorisé là où il joue son rôle structurel et doit être échappé là où il est une donnée. Au-delà, l'espace et les caractères guillemet double, inférieur à, supérieur à, pourcentage, barre oblique inversée, accent circonflexe, accent grave et les accolades ne peuvent jamais apparaître tels quels. Le tableau de référence de cette page les liste un par un avec la façon dont les quatre encodeurs les traitent.

Pourquoi une seule lettre accentuée devient-elle deux codes pourcent ?+

Parce que l'encodage pourcent opère sur des octets, pas sur des caractères, et que les URL modernes transportent le texte en UTF-8. En UTF-8, la lettre e accent aigu occupe deux octets, C3 et A9, et s'encode donc en %C3%A9. Un caractère CJK occupe trois octets et devient trois triplets, et un emoji occupe quatre octets et devient quatre triplets, soit douze caractères pour un seul symbole visible. C'est pourquoi une chaîne encodée peut être plusieurs fois plus longue que le texte saisi, et pourquoi une limite de longueur mesurée en caractères se comporte différemment avant et après l'encodage. La vue des octets de cette page montre cette expansion caractère par caractère.

Puis-je simplement encoder toute l'URL par sécurité ?+

Non, et c'est l'erreur qui produit le plus de liens cassés. Faire passer une URL déjà correcte dans un encodeur transforme chaque caractère structurel en séquence d'échappement : les barres obliques deviennent %2F, le point d'interrogation devient %3F, et le signe pourcentage de toute séquence existante devient %25. Ce qui en sort n'est plus une URL, c'est une chaîne qui se trouve y ressembler. Si le lien fonctionne déjà, n'y touchez pas. Si un lien contient un espace brut ou un caractère accentué, l'encodage d'URL complète est le bon outil, car il les corrige sans toucher aux délimiteurs. Essayez l'exemple Déjà encodé en mode encodage pour voir exactement ce qu'un réencodage fait à un lien sain.

Qu'est-ce que le punycode, et pourquoi l'hôte est-il différent de ce que j'ai tapé ?+

Le système de noms de domaine ne transporte qu'un ensemble restreint de caractères ASCII : un domaine écrit en arabe, en cyrillique, en grec, en chinois ou simplement avec un tréma allemand doit donc être traduit en ASCII avant de pouvoir être résolu. Cette traduction, c'est le punycode, et elle produit des libellés qui commencent par xn--. Le navigateur fait cette conversion sans rien dire, ce qui signifie que l'hôte que vous lisez et l'hôte réellement résolu sont deux chaînes différentes. Afficher les deux est une vérification de sécurité, pas une curiosité : une attaque par homographe fonctionne précisément parce qu'un nom construit avec des caractères qui se ressemblent se lit comme une marque familière tout en menant à tout autre chose. Cette page décode le punycode en Unicode dans le navigateur, puisqu'il n'existe aucun moyen intégré de faire la conversion inverse.

Est-il sûr de mettre un nom d'utilisateur et un mot de passe dans une URL ?+

Considérez tout identifiant apparu dans une URL comme déjà divulgué. La partie informations utilisateur d'une URL, tout ce qui précède l'arobase, est envoyée en clair dans la ligne de requête avec les anciens protocoles, est écrite dans les journaux d'accès du serveur et dans ceux des proxys, est enregistrée dans l'historique du navigateur et a longtemps fuité via l'en-tête Referer envoyé au site suivant que vous visitez. Certains navigateurs la suppriment ou avertissent désormais, mais les copies déjà écrites dans les journaux ne disparaissent pas. Si un lien contenant des identifiants a été partagé, collé dans un ticket ou ouvert depuis un e-mail, changez le mot de passe plutôt que de compter sur le fait que le lien reste privé. Cette page signale les identifiants chaque fois qu'elle en trouve et masque le mot de passe au lieu de l'afficher.

Pourquoi decodeURIComponent lève-t-il une erreur, et que faire à la place ?+

Il lève une URIError chaque fois que l'entrée n'est pas une chaîne UTF-8 encodée en pourcent valide, ce qui couvre un signe pourcentage suivi de rien, une paire non hexadécimale comme %ZZ, un caractère multioctet tronqué comme un %C3 isolé, un encodage trop long et une moitié de paire de substitution échappée. L'erreur n'indique ni la position ni la cause, si bien qu'en production elle se transforme généralement en page blanche ou en erreur 500. Dans votre propre code, la solution est d'encadrer l'appel et de gérer l'échec explicitement au lieu de le laisser remonter. Pendant le débogage, la solution est de coller la valeur ici : le décodeur de cette page parcourt la chaîne à la main et vous dit quel caractère est en cause et pourquoi, au lieu de refuser de le dire.

Ce que je colle est-il envoyé à un serveur ?+

Non. Tous les encodeurs, le décodeur, l'analyseur d'URL, le décodeur punycode et l'éditeur de requête s'exécutent dans cet onglet en JavaScript simple, et aucun lien n'est jamais chargé. C'est plus important ici que pour la plupart des outils, car les URL que l'on apporte à un décodeur sont justement celles qui contiennent des jetons de session, des liens de téléchargement signés, des paramètres de réinitialisation de mot de passe et des noms d'hôte internes. La saisie est limitée à 100,000 caractères, bien au-delà de toute URL utilisable, et rien n'est conservé d'une visite à l'autre.

D'autres outils ciblés, prêts quand vous l'êtes.

Découvrez une collection grandissante pour les calculs, les documents, la rédaction et le travail de tous les jours.

Voir tous les outils