Pour encoder une URL (URL encode), on remplace chaque caractère qui n’est ni une lettre non accentuée, ni un chiffre, ni l’un de - . _ ~ par un % suivi de la valeur hexadécimale de chacun de ses octets UTF-8. Une espace devient %20 (ou + dans la query string), & devient %26 et crème brûlée devient cr%C3%A8me+br%C3%BBl%C3%A9e. Le plus rapide : collez le texte dans notre encodeur d’URL gratuit et copiez le résultat. C’est gratuit, sans compte et ça marche dans n’importe quel navigateur. Le plus délicat, c’est de savoir quoi encoder et quelle variante attend l’endroit où vous collez le lien : c’est l’objet de ce guide.
Tous les résultats ci-dessous sont réels : nous avons passé les entrées dans les outils My Botsy en production le 1er novembre 2026, puis comparé avec JavaScript (Node.js 24), Python 3.13 et PHP sur les mêmes chaînes.
Encoder une URL, étape par étape
- Isolez la valeur. N’encodez que la donnée placée dans l’URL : un terme de recherche, un nom de fichier, une adresse de redirection. Jamais l’adresse complète (voir plus bas).
- Collez-la dans l’encodeur. Ouvrez l’encodeur d’URL, collez la valeur et cliquez sur Envoyer.
- Copiez le résultat. Utilisez le bouton de copie. Les espaces sortent en
+, ce qui est correct dans une query string. - Passez à %20 si c’est dans le chemin. Si la valeur fait partie du chemin (avant le
?), remplacez chaque+par%20. Aucun risque : un vrai signe plus dans votre texte est déjà encodé en%2B. - Vérifiez. Collez le lien final dans l’analyseur d’URL : il décode chaque paramètre et montre exactement ce que le serveur recevra.
Essayez maintenant : collez un texte avec des espaces, des accents ou un & dans l’encodeur d’URL gratuit et obtenez une version sûre pour un lien en une seconde.
Quels caractères faut-il encoder ?
La RFC 3986, la norme qui définit les URL, range les caractères en trois groupes :
- Non réservés, jamais encodés :
A–Z a–z 0–9 - . _ ~. Les lettres accentuées (é, è, à, ç) n’en font pas partie. - Réservés, ils structurent l’URL :
: / ? # [ ] @ ! $ & ' ( ) * + , ; =. Il faut les encoder quand ils font partie de vos données. Un&non encodé dans une recherche ouvre un nouveau paramètre et coupe votre valeur en deux. - Tout le reste : espaces, guillemets,
< >,%, accents, emojis et tout alphabet non latin. Toujours encodés, octet par octet, en UTF-8. C’est pour ça quecafé-crèmedonnecaf%C3%A9-cr%C3%A8me: le tiret reste, les accents prennent deux octets chacun.
Test réel : une chaîne pleine de pièges
Nous avons volontairement choisi une entrée qui cumule presque tous les problèmes :
Café & Bar #1 / 50% off? a+b=c ~ü 東京 Tom's "best" <b>
L’encodeur d’URL a renvoyé :
Caf%C3%A9+%26+Bar+%231+%2F+50%25+off%3F+a%2Bb%3Dc+%7E%C3%BC+%E6%9D%B1%E4%BA%AC+Tom%27s+%22best%22+%3Cb%3E
| Entrée | Sortie | Pourquoi c’est important |
|---|---|---|
| espace | + | Format formulaire, valable dans la query |
& | %26 | Sinon il ouvrirait un nouveau paramètre |
# | %23 | Sinon la suite devient un fragment que le serveur ne voit jamais |
% | %25 | Sinon 50% o serait lu comme un échappement cassé |
+ | %2B | Sinon le serveur le lit comme une espace |
é, ü | %C3%A9, %C3%BC | Deux octets UTF-8 chacun |
~ | %7E | Inutile mais sans danger : les serveurs acceptent les deux formes |
' " < > | %27 %22 %3C %3E | Conservés comme données, pas supprimés |
Cette sortie est identique, octet pour octet, à celle de URLSearchParams dans le navigateur pour le même texte, et à celle de la fonction PHP urlencode(), utilisée par l’outil. Une valeur encodée ici se comporte donc comme celle qu’enverrait un formulaire web.
%20 ou + : que choisir pour les espaces ?
Les deux signifient « espace », mais pas au même endroit. %20 est l’encodage-pourcent général de la RFC 3986 et fonctionne partout dans l’URL. + vient du format des formulaires HTML (application/x-www-form-urlencoded) et ne vaut une espace que dans la query string. Dans le chemin, + est un plus littéral : /fichiers/mon+rapport.pdf demande un fichier dont le nom contient un plus.
- Valeurs de la query (
?q=cr%C3%A8me+br%C3%BBl%C3%A9e) :+ou%20, les deux marchent. - Segments de chemin (
/docs/mon%20rapport) :%20uniquement. - Liens
mailto::%20. La norme mailto (RFC 6068) demande d’écrire les espaces en%20, car un+ne se distingue pas d’un vrai plus, comme dansmarie+newsletter@example.org. C’est pourquoi notre générateur de liens mailto utilise%20; détails dans notre guide des liens mailto.
Quelle fonction utiliser dans votre code
Nous avons passé la même chaîne de test dans les fonctions les plus courantes. Elles divergent sur quatre points : l’espace, /, ~ et '.
| Fonction | Espace | / | ~ | ' | Laisse & # ? tels quels ? |
|---|---|---|---|---|---|
JS encodeURIComponent | %20 | %2F | ~ | ' | Non |
JS encodeURI | %20 | / | ~ | ' | Oui |
JS URLSearchParams | + | %2F | %7E | %27 | Non |
Python quote() | %20 | / | ~ | %27 | Non |
Python quote_plus() | + | %2F | ~ | %27 | Non |
PHP rawurlencode() | %20 | %2F | ~ | %27 | Non |
PHP urlencode() / notre outil | + | %2F | %7E | %27 | Non |
Deux d’entre elles piègent souvent. encodeURI est faite pour une URL complète : elle laisse &, #, ?, = et + intacts. Appliquée à une valeur, Café & Bar #1 devient Caf%C3%A9%20&%20Bar%20#1, et le lien casse au & et au #. Le quote() de Python garde la / par défaut : une redirection comme /panier?id=7 conserve sa barre si vous ne passez pas safe=''. Pour une valeur seule, prenez encodeURIComponent, quote(valeur, safe='') ou rawurlencode.
Exemple concret : une URL dans une URL
Une page de connexion doit renvoyer l’utilisateur vers /cart?id=7. Si vous écrivez /login?next=/cart?id=7, le second ? et tout & suivant embrouillent le serveur. Encodez d’abord l’URL intérieure :
/login?next=%2Fcart%3Fid%3D7
Pour vérifier un lien terminé, nous avons collé https://shop.example/search?q=caf%C3%A9+%26+bar&next=%2Fcart%3Fid%3D7 dans l’analyseur d’URL. Il a affiché la query brute, puis les paramètres décodés tels que le serveur les reçoit :
{ "q": "café & bar", "next": "/cart?id=7" }
Deux valeurs propres, aucun paramètre parasite. Les liens de campagne suivent la même logique : chaque valeur UTM est un paramètre, donc encodez-la ou, mieux, tenez-vous-en aux minuscules et aux tirets bas comme le conseille notre guide des paramètres UTM.
Les erreurs d’encodage les plus courantes
Encoder l’URL entière
Encoder https://mybotsy.com/?q=chaussures rouges donne https%3A%2F%2Fmybotsy.com%2F%3Fq%3Dchaussures+rouges, qui n’est plus un lien valide. Ce n’est correct que si l’URL complète est elle-même la valeur d’un paramètre, comme dans la redirection ci-dessus.
Encoder deux fois
Réencoder un texte déjà encodé encode les signes pourcent. Nous avons testé a%20b et obtenu a%2520b. Si vous voyez %25 suivi de deux chiffres hexadécimaux dans un lien, il a été encodé deux fois. Décoder %25252F demande trois passes pour arriver à / (%252F, puis %2F, puis /).
Perdre un plus au décodage
Les décodeurs de type formulaire, dont notre décodeur d’URL, transforment + en espace. Nous avons décodé q=mac+cheese&phone=%2B54+11+5555&path=%2Fdocs%2520v2 et obtenu q=mac cheese&phone=+54 11 5555&path=/docs%20v2. L’indicatif n’a survécu que parce que son plus était écrit %2B ; un +33 non encodé serait devenu une espace. Le même problème abîme les valeurs Base64 dans les URL : voyez comment décoder du Base64 pour l’alphabet adapté aux URL qui l’évite.
Mélanger vieux échappements Latin-1 et UTF-8
Certains vieux systèmes encodent é en %E9 (un seul octet Latin-1) au lieu de %C3%A9. Décodé en UTF-8, caf%E9 s’affiche caf�. Si le caractère de remplacement apparaît, la source utilisait un ancien encodage, fréquent avec les accents venus de systèmes hérités.
Se fier au rognage automatique
Notre encodeur supprime les espaces au tout début et à la toute fin : " hello world" + saut de ligne + "line 2 " est sorti en hello+world%0D%0Aline+2. C’est en général ce qu’on veut, mais si une espace initiale compte, ajoutez %20 à la main. Un saut de ligne saisi dans le navigateur devient %0D%0A.
Un % isolé en JavaScript
decodeURIComponent("50%") lève URIError: URI malformed. Notre décodeur laisse le % isolé tel quel (50% off reste 50% off) : pratique avec des données sales, mais il ne prévient pas non plus.
Outils gratuits associés
- Décodeur d’URL : retransforme
%20,%26et%C3%A9en texte. - Analyseur d’URL : sépare hôte, chemin et paramètres décodés.
- Générateur de liens UTM : crée des liens de campagne aux valeurs déjà encodées.
- Générateur de liens WhatsApp : liens wa.me avec message prérempli (voir notre guide des liens WhatsApp).
- Générateur de slug : si vous maîtrisez l’URL, un slug propre évite tout encodage (créer un slug optimisé SEO).
Tous sont gratuits et sans compte. Les visiteurs ont droit à 5 utilisations par jour, et un compte My Botsy gratuit (100 % gratuit, sans spam) supprime cette limite.
Questions fréquentes
Qu’est-ce que l’encodage d’URL ?
L’encodage d’URL, ou encodage-pourcent, remplace les caractères interdits ou ayant un sens spécial dans une URL par un signe % et la valeur hexadécimale de chaque octet. Une espace devient %20, & devient %26 et é devient %C3%A9, ses deux octets UTF-8.
Une espace dans une URL, c’est %20 ou + ?
Dans la query string, les deux marchent, car + est la façon formulaire d’écrire une espace. Dans le chemin ou un lien mailto, utilisez %20, car + y est un plus littéral. Notre encodeur renvoie +, remplacez-le par %20 pour un chemin.
Quels caractères n’ont pas besoin d’être encodés ?
Seulement les lettres A à Z non accentuées, les chiffres 0 à 9 et les symboles - . _ ~. Les caractères réservés comme & ? # = / + : sont encodés quand ils font partie de la donnée, et tout le reste (espaces, guillemets, accents, emojis) l’est toujours.
Quelle différence entre encodeURI et encodeURIComponent ?
encodeURI sert pour une URL complète et ne touche pas aux caractères structurels comme & # ? = et /. encodeURIComponent sert pour une valeur seule et les encode. Utiliser encodeURI sur un terme de recherche ou une redirection casse le lien au premier & ou #.
Pourquoi mon lien affiche-t-il %2520 ?
Il a été encodé deux fois : la première passe a transformé l’espace en %20, la seconde a transformé le % en %25. Décodez-le une fois, puis encodez le texte d’origine une seule fois.
L’encodeur d’URL est-il gratuit ?
Oui. L’encodeur d’URL de My Botsy est gratuit, sans compte et fonctionne dans n’importe quel navigateur. Les visiteurs ont 5 utilisations par jour, et un compte gratuit supprime la limite.
Une valeur à mettre dans un lien ? Collez-la dans l’encodeur d’URL gratuit, copiez le résultat et vérifiez le lien final avec l’analyseur d’URL.