Encodage URL
La mise en évidence est un pourcentage d'octets codés.
Outil gratuit en ligne d'encodage/décodage URL. Supporte 4 modes encodeURIComponent/encodeURI/RFC 3986, surlignage en temps réel des caractères encodés, mode batch multiligne, Query Only pour encoder uniquement les valeurs des paramètres. Traitement local dans le navigateur, zéro envoi de données.
Recommandations connexes
Qu'est-ce que l'encodage URL ?
L'encodage URL (encodage pour cent) est le processus de conversion des caractères non sécurisés dans les URL au format %XX. Les URL ne peuvent contenir qu'un petit sous-ensemble de caractères ASCII (lettres, chiffres, -_.~), tous les autres caractères (y compris le chinois, les espaces, les symboles spéciaux) doivent être encodés avant d'être transmis dans une URL. Par exemple, l'espace est encodé en %20, le caractère chinois « 中 » en %E4%B8%AD.
**encodeURIComponent vs encodeURI** : Ce sont les deux fonctions d'encodage les plus utilisées. encodeURIComponent encode de manière plus exhaustive, y compris les délimiteurs de paramètres comme &, =, ?, elle est donc adaptée pour encoder des valeurs de paramètres individuelles. encodeURI préserve la structure de l'URL (protocole://, chemin, /, ?, #), elle est donc adaptée pour encoder des URL complètes. Une utilisation incorrecte provoque des erreurs d'analyse de paramètres.
**RFC 3986 vs anciennes normes** : RFC 3986 traite le tilde ~ comme un caractère sécurisé ne nécessitant pas d'encodage, alors que les premières normes l'encodent en %7E. L'utilisation de RFC 3986 réduit les échappements inutiles, améliore la lisibilité des URL et évite les problèmes d'analyse de %7E sur certains serveurs.
**Mode Query Only** : Il s'utilise lorsque vous avez uniquement besoin d'encoder les valeurs des paramètres de requête dans l'URL, sans affecter les noms de clés, les signes égaux et les symboles &. Par exemple, ?name=张三 est encodé en ?name=%E5%BC%A0%E4%B8%89, les noms de clés restent lisibles et seules les valeurs sont encodées.
**Surlignage d'encodage** : Surligne en temps réel les caractères au format %XX en couleur ambre pour que les utilisateurs voient d'un coup d'œil quels caractères ont été encodés. Cela aide à comprendre les règles d'encodage : les lettres et chiffres sont généralement des caractères sécurisés qui ne sont pas encodés, seuls le chinois et les symboles spéciaux sont encodés. Tous les calculs sont effectués localement dans le navigateur, aucune donnée n'est envoyée.
Cas d'utilisation
- Débogage de paramètres API : compare les sorties d'encodeURIComponent et encodeURI pour résoudre les problèmes de non-correspondance de signature d'interface
- Décodage de journaux : décode par lots le contenu encodé URL dans les journaux pour restaurer un texte lisible
- Construction d'URL : le mode Query Only préserve les noms de clés et encode uniquement les valeurs, évitant les erreurs de format dues à la concaténation manuelle
- Développement frontend : le surlignage aide à comprendre quels caractères sont échappés, utile pour déboguer les redirections de page
- Migration de données : traite par lots les données encodées URL exportées de systèmes hérités pour les convertir au nouveau format
Comment utiliser
- Saisissez ou collez l'URL ou le texte à encoder/décoder
- Sélectionnez le sens d'encodage (Encoder/Décoder) et le mode (Component / URI / full / RFC 3986)
- Activez le mode batch pour des données multilignes, ou Query Only pour encoder uniquement les valeurs des paramètres
- Vérifiez le résultat surligné et copiez la chaîne encodée pour l'utiliser dans des requêtes API ou la construction d'URL
Fonctionnalités
- Quatre modes d'encodage : basculement en un clic entre encodeURIComponent / encodeURI / full / RFC 3986, comparaison en temps réel des différences de sortie
- Surlignage d'encodage : surligne en temps réel les caractères %XX échappés, marques de couleur ambre pour visualiser les résultats d'un coup d'œil
- Mode batch : support de l'encodage/décodage multiligne, chaque ligne est traitée indépendamment, idéal pour les journaux ou données par lots
- Mode Query Only : encode uniquement la partie valeur des paramètres URL (après le signe égal), en conservant intacts les noms de clés, symboles et structure de chemin
- Debounce en temps réel : encodage/décodage automatique en 300ms, pas besoin de cliquer sur un bouton, les résultats apparaissent pendant la saisie
- Compteur de caractères : affiche en temps réel le nombre de caractères saisis, pratique pour vérifier les limites de longueur des paramètres API
Exemples de code
Encodage/Décodage URL en JavaScript
// encodeURIComponent : encode les valeurs de paramètres individuelles (le plus courant)
const param = encodeURIComponent('张三&李四');
console.log(param); // %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
// encodeURI : encode l'URL complète (conserve les caractères structurels :/?#&=)
const url = encodeURI('https://example.com/search?q=bonjour monde');
console.log(url);
// Décodage
const decoded = decodeURIComponent(param);
console.log(decoded); // 张三&李四
// Compatible RFC 3986 (~ n'est pas encodé)
function rfc3986Encode(str) {
return encodeURIComponent(str).replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase());
}
// API URLSearchParams (méthode moderne, encodage automatique)
const params = new URLSearchParams({ name: '张三', city: '北京' });
console.log(params.toString());
// name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%ACEncodage/Décodage URL en Python
from urllib.parse import quote, unquote, urlencode, quote_plus
# quote : similaire à encodeURIComponent
encoded = quote('张三&李四')
print(encoded) # %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
# Mode RFC 3986 (~ n'est pas encodé, c'est le défaut)
print(quote('hello~world')) # hello~world
# quote_plus : les espaces sont encodés en + (format formulaire)
print(quote_plus('hello world')) # hello+world
# Décodage
print(unquote(encoded)) # 张三&李四
# urlencode : construire une chaîne de requête
params = urlencode({'name': '张三', 'city': '北京'})
print(params)
# name=%E5%BC%A0%E4%B8%89&city=%E5%8C%97%E4%BA%ACEncodage/Décodage URL en Java
import java.net.URLEncoder;
import java.net.URLDecoder;
import java.net.URI;
import java.nio.charset.StandardCharsets;
public class URLEncodeExample {
public static void main(String[] args) throws Exception {
// Encodage URL (URLEncoder est format formulaire, espaces deviennent +)
String encoded = URLEncoder.encode("张三&李四", "UTF-8");
System.out.println(encoded);
// %E5%BC%A0%E4%B8%89%26%E6%9D%8E%E5%9B%9B
// Décodage
String decoded = URLDecoder.decode(encoded, "UTF-8");
System.out.println(decoded); // 张三&李四
// Construire une URL complète (la classe URI gère automatiquement l'encodage)
URI uri = new URI("https", "example.com", "/search", "q=bonjour", null);
System.out.println(uri.toASCIIString());
}
}FAQ
Quelle est la différence entre encodeURIComponent et encodeURI ?
encodeURIComponent encode tous les caractères non sécurisés, y compris &, =, ?, etc., il est donc adapté pour encoder des valeurs de paramètres individuelles. encodeURI préserve les caractères structurels de l'URL (:, /, ?, #, etc.), il est donc adapté pour encoder des URL complètes. Cas d'utilisation : Component pour les valeurs de paramètres, URI pour les URL complètes.
Quelle est la différence entre RFC 3986 et l'encodage standard ?
RFC 3986 est une version mise à jour de la norme URL qui traite le tilde ~ comme un caractère sécurisé ne nécessitant pas d'encodage, alors que les anciennes normes l'encodent en %7E. L'utilisation de RFC 3986 évite les différences d'analyse sur certains serveurs et offre une meilleure compatibilité.
Dans quels cas utilise-t-on le mode Query Only ?
Il s'utilise lorsque vous avez une chaîne de requête URL comme ?name=张三&city=北京 et que vous souhaitez encoder uniquement les valeurs des paramètres sans affecter les noms de clés et les symboles. Dans ce cas, name et city restent inchangés, tandis que les valeurs sont encodées en %E5%BC%A0%E4%B8%89 et %E5%8C%97%E4%BA%AC.
Les espaces doivent-ils être encodés en + ou en %20 ?
Dans le format application/x-www-form-urlencoded (soumission de formulaires HTML), les espaces sont encodés en +. Mais dans les chemins URL et avec encodeURIComponent, les espaces sont toujours encodés en %20. Cet outil utilise le format %20 par défaut.
Pourquoi différents outils produisent-ils des résultats différents pour un même caractère chinois ?
Cela dépend de la méthode d'encodage des caractères. Cet outil utilise l'encodage UTF-8 (norme Web), le caractère chinois « 中 » est encodé en %E4%B8%AD. Si d'autres outils utilisent l'encodage GBK, le résultat sera %D6%D0. Il est recommandé de toujours utiliser UTF-8 pour les URL Web.
À quoi sert le surlignage d'encodage ?
Il surligne les caractères encodés au format %XX (comme espace→%20), aidant à comprendre les règles d'encodage et à résoudre les problèmes. Les lettres et chiffres sont des caractères sécurisés qui ne sont pas encodés, seuls le chinois et les symboles spéciaux sont encodés.
Le caractère % lui-même doit-il être encodé ?
Oui. % est le caractère de début d'échappement en encodage URL. Si un % littéral apparaît dans une valeur de paramètre, il doit être encodé en %25 ; sinon, il sera interprété à tort comme un préfixe d'encodage, provoquant des erreurs d'analyse. Par exemple, 100% doit être encodé en 100%25.
Glossaire
- Encodage pour cent (Percent-encoding)
- Le nom officiel de l'encodage URL, une méthode d'encodage qui représente les caractères à l'aide de % suivi de deux chiffres hexadécimaux. Par exemple, l'espace est encodé en %20, le caractère chinois « 中 » en %E4%B8%AD.Wikipedia - Encodage pour cent
- encodeURIComponent
- Fonction intégrée de JavaScript qui encode tous les caractères à l'exception de A-Z a-z 0-9 - _ . ! ~ * ' ( ). Elle est le plus souvent utilisée pour encoder des valeurs individuelles de paramètres de requête URL.
- encodeURI
- Fonction intégrée de JavaScript qui préserve les caractères structurels de l'URL (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) et n'encode que les caractères qui nécessitent réellement un encodage. Elle est utilisée pour encoder des URL complètes.
- RFC 3986
- La dernière norme IETF pour la syntaxe générique URI (2005), qui définit les règles d'encodage URL et classe le tilde ~ comme caractère non réservé (ne nécessitant pas d'encodage). Remplace les anciennes RFC 2396 et RFC 1738.RFC 3986
- Caractères réservés (Reserved Characters)
- Caractères ayant une signification spéciale dans les URL, tels que : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Ces caractères doivent être encodés lorsqu'ils sont utilisés comme données, mais pas dans leurs positions structurelles.
- Caractères non réservés (Unreserved Characters)
- Caractères sécurisés pouvant être utilisés à n'importe quelle position dans une URL sans encodage, notamment A-Z, a-z, 0-9, -, _, ., ~ (selon RFC 3986).
- Chaîne de requête (Query String)
- La partie de l'URL après ?, composée de paires key=value séparées par &. Par exemple, dans ?name=张三&age=20, name=张三 et age=20 sont deux paramètres.
- URLSearchParams
- API fournie par les navigateurs modernes pour construire et analyser facilement des chaînes de requête URL, en gérant automatiquement l'encodage et le décodage. Plus sûre et fiable que la concaténation manuelle de chaînes.
- application/x-www-form-urlencoded
- Le format d'envoi par défaut des formulaires HTML, où les espaces sont encodés en + au lieu de %20, légèrement différent d'encodeURIComponent. Les frameworks côté serveur gèrent généralement les deux formats automatiquement.
- Encodage UTF-8
- L'encodage de caractères standard du Web. Dans l'encodage URL, les caractères non ASCII (tels que le chinois, les emoji) sont d'abord convertis en séquences d'octets UTF-8, puis chaque octet est encodé au format %XX.
Comparaison de l'échappement des caractères sur 4 modes d'encodage
| Caractère | Signification | encodeURIComponent | encodeURI | RFC 3986 |
|---|---|---|---|---|
Espace | Espace | %20 | %20 | %20 |
! | Point d'exclamation | %21 | ! | %21 |
# | Identificateur de fragment | %23 | # | %23 |
$ | Symbole dollar | %24 | $ | %24 |
& | Séparateur de paramètres | %26 | & | %26 |
' | Apostrophe | %27 | ' | %27 |
( | Parenthèse gauche | %28 | ( | %28 |
) | Parenthèse droite | %29 | ) | %29 |
* | Astérisque | %2A | * | %2A |
+ | Signe plus | %2B | + | %2B |
, | Virgule | %2C | , | %2C |
/ | Séparateur de chemin | %2F | / | %2F |
: | Deux-points | %3A | : | %3A |
; | Point-virgule | %3B | ; | %3B |
= | Signe égal | %3D | = | %3D |
? | Chaîne de requête | %3F | ? | %3F |
@ | Arobase | %40 | @ | %40 |
~ | Tilde | %7E | %7E | ~ |
Référence rapide des caractères réservés URL courants
| Encodé | Caractère d'origine | Usage dans l'URL |
|---|---|---|
%20 | (espace) | Espace |
%21 | ! | Sous-délimiteur |
%23 | # | Identificateur de fragment (hash) |
%25 | % | Caractère d'échappement lui-même |
%26 | & | Séparateur de paramètres de requête |
%2B | + | Signe plus / espace de formulaire |
%2F | / | Séparateur de chemin |
%3A | : | Séparateur de schéma |
%3D | = | Séparateur clé-valeur |
%3F | ? | Début de chaîne de requête |
%40 | @ | Séparateur authentification/email |
%5B | [ | Paramètre tableau (RFC 3986) |
Authoritative References
- Comparaison sécurisée
- Conversion Binaire
- Chiffre de César
- Code Morse
- Hexadécimal
- Vidéo vers Base64
- Base64 en Vidéo
- Image vers Base64
- Base64 vers image
- Texte vers Base64
- Base64 vers Texte
- Vérificateur de hash de fichier
- Fichier vers Base64
- Base64 vers Fichier
- Audio vers Base64
- Base64 vers Audio
- Chiffrer et déchiffrer AES
- Chiffrement DES
- Encodeur Décodeur Base32
- Encoder et decoder Base58
- Encodage Base64
- Décodage Base64
- Comparaison Base64
- Découpage Base64
- Fusion Base64 multi-lignes
- Formatage Base64
- Validation Base64
- Encodage Base64 par lots
- Décodage Base64 par Lots
- Nettoyage Base64
- Gestion du padding Base64
- Statistiques Base64
- Base64 vers HEX
- Convertisseur Base64 DataURL
- Convertisseur Base64-Hex
- Encodage Base85
- HMAC Générateur
- PBKDF2 Dérivation
- Hash MD5
- Hash SHA-256
- Hachage SHA1
- Hachage SHA512
- Décodeur, Vérificateur et Générateur JWT
- HTML Encode/Decode
- Unicode Escape
- Encodage URL
- Base64 URL-safe
- MIME Base64
- Obfuscation Java
- Obfuscation JavaScript
- Obfuscation PHP
- Obfuscation Python