UltKit

Encoder et décoder une URL

Rendez un texte utilisable dans une URL, ou retransformez les séquences du type %20 en caractères lisibles. L’outil utilise les fonctions encodeURIComponent, encodeURI et decodeURIComponent de votre navigateur, affiche les paramètres de requête dans un tableau et n’envoie rien à un serveur.

Mode

0 caractères · 0 mots · 0 lignes

0 caractères · 0 mots · 0 lignes

Fonctionne entièrement dans cet onglet du navigateur. Votre texte n’est jamais envoyé ni stocké.

Ce que chaque fonction échappe

Calculé avec les fonctions du navigateur elles-mêmes. encodeURIComponent laisse intacts les lettres, les chiffres et ces signes : ! ' ( ) * - . _ ~

CaractèreencodeURIComponentencodeURI
(espace)%20%20
!!!
"%22%22
#%23#
$%24$
%%25%25
&%26&
'''
(((
)))
***
+%2B+
,%2C,
/%2F/
:%3A:
;%3B;
=%3D=
?%3F?
@%40@
[%5B%5B
]%5D%5D
{%7B%7B
}%7D%7D
|%7C%7C
\%5C%5C
^%5E%5E
`%60%60
<%3C%3C
>%3E%3E
~~~
---
___
...
é%C3%A9%C3%A9
€%E2%82%AC%E2%82%AC
😀%F0%9F%98%80%F0%9F%98%80

L’encodage-pourcent et les caractères réservés de la RFC 3986

Une URL ne peut contenir qu'un ensemble limité de caractères ASCII. La RFC 3986, la spécification de 2005 sur la syntaxe des URI, les répartit en deux groupes. Les caractères non réservés, A–Z, a–z, 0–9 et les quatre signes - . _ ~, n'ont jamais besoin d'être encodés. Les caractères réservés ont un rôle : les délimiteurs généraux : / ? # [ ] @ séparent le schéma, l'hôte, le chemin, la requête et le fragment, et les sous-délimiteurs ! $ & ' ( ) * + , ; = séparent les éléments à l'intérieur de ceux-ci, comme & et = dans une chaîne de requête. Tout le reste, ainsi que tout caractère réservé utilisé comme simple donnée, doit être encodé en pourcentage.

L'encodage en pourcentage écrit un octet sous la forme % suivi de deux chiffres hexadécimaux. Le texte est d'abord converti en UTF-8 : une espace devient %20, un é (deux octets) devient %C3%A9 et un émoji devient quatre groupes %XX. C'est pourquoi une recherche « café & bar » se retrouve dans un lien sous la forme caf%C3%A9%20%26%20bar : le & est encodé pour que le serveur ne le lise pas comme le début d'un nouveau paramètre.

encodeURIComponent, encodeURI et décodage

encodeURIComponent est le bon choix pour un seul élément, comme une valeur de requête, un segment de chemin ou une URL de redirection passée en paramètre. Cette fonction échappe tout sauf les caractères non réservés et ! ' ( ) *, que JavaScript laisse intacts pour des raisons historiques. encodeURI (URL entière) suppose que son entrée est déjà une adresse complète et conserve les caractères réservés : dans https://example.com/a b?q=1, seule l'espace est encodée. Utiliser encodeURI sur la valeur d'un paramètre est un bug classique : un & ou un # dans la valeur resterait tel quel et casserait l'URL.

Decode (décodage) annule l'une ou l'autre fonction. Les formulaires HTML envoyés en GET utilisent l'ancien format application/x-www-form-urlencoded, dans lequel l'espace s'écrit + au lieu de %20 ; laissez Treat + as a space coché pour ces cas, et décochez-le lorsqu'un signe plus littéral compte, comme dans un numéro de téléphone. Si le texte contient un % qui n'est pas suivi de deux chiffres hexadécimaux, ou des octets qui ne sont pas de l'UTF-8 valide, le décodage échoue avec un message clair au lieu de deviner. Lorsque le texte contient une chaîne de requête, ses paramètres apparaissent décodés dans un tableau sous l'outil. Pour des données binaires dans des URL, Base64url est l'alternative habituelle.

Questions fréquentes

Un espace dans une URL doit-il s’écrire %20 ou avec un signe plus ?
Dans les chemins, et au sens de la RFC 3986, une espace s'écrit %20. La forme + ne représente une espace que dans les chaînes de requête encodées à la manière des formulaires HTML ; %20 est donc le choix sûr partout.
Pourquoi mon URL contient-elle %2520 ?
Il a été encodé deux fois. Le premier passage a transformé une espace en %20, et le second a encodé le % lui-même en %25. Décodez une fois pour retirer la couche en trop, et n'encodez les valeurs qu'à un seul endroit de votre code.
Quels caractères n’ont jamais besoin d’encodage-pourcent ?
L'ensemble des caractères non réservés de la RFC 3986 : les lettres de A à Z en majuscules et minuscules, les chiffres de 0 à 9, ainsi que le trait d'union, le point, le tiret bas et le tilde.
Une URL peut-elle contenir des lettres accentuées sans encodage ?
Les navigateurs les affichent, mais sur le réseau, chaque caractère non ASCII d'un chemin ou d'une requête est envoyé en UTF-8 encodé en pourcentage. Les noms de domaine utilisent un autre système, le Punycode, qui les transforme en libellés xn--.
Pourquoi le décodage signale-t-il une séquence mal formée ?
Le texte contient un % qui n'est pas suivi de deux chiffres hexadécimaux, comme un « 100 % » littéral, ou bien les octets donnent de l'UTF-8 invalide. Encodez les % isolés en %25 avant de décoder.