Encoder une URL en ligne gratuitement : Le guide ultime de l'encodage en pourcentage
L'encodage URL, également connu sous le nom d'encodage en pourcentage (Percent-encoding), est un mécanisme permettant d'encoder des informations dans un identifiant de ressource uniforme (URI). Bien que cela puisse sembler être un simple détail technique, c'est un élément fondamental du fonctionnement du Web, garantissant que les données sont transmises correctement entre les navigateurs et les serveurs.
Dans ce guide, nous allons approfondir les raisons pour lesquelles l'encodage URL est nécessaire, son fonctionnement et nous vous fournirons un outil en ligne pratique pour le gérer.
Pourquoi avons-nous besoin de l'encodage URL ?
Les URL (Uniform Resource Locators) ont un jeu de caractères limité défini par la RFC 3986. Elles ne peuvent contenir que certains caractères. Si vous devez inclure des caractères qui ne font pas partie de ce jeu, comme des espaces, des caractères non ASCII (comme ceux du chinois ou de l'arabe) ou des caractères ayant une signification particulière dans une URL (comme & ou =), vous devez les encoder.
Caractères réservés vs non réservés
Selon la spécification, les caractères sont divisés en deux catégories :
Caractères non réservés : Ils peuvent être utilisés dans une URL sans être encodés. Ils comprennent :
- Lettres majuscules et minuscules (A-Z, a-z)
- Chiffres décimaux (0-9)
- Trait d'union (
-), souligné (_), point (.) et tilde (~)
Caractères réservés : Ils ont une signification particulière dans une URL (par exemple, ils sont utilisés comme délimiteurs comme
/,?,#,[,],@,!,$,&,',(,),*,+,,,;,=). Si ces caractères font partie des données envoyées (comme une requête de recherche) et ne servent pas de délimiteurs, ils doivent être encodés.
Comment fonctionne l'encodage en pourcentage
L'encodage en pourcentage remplace un caractère réservé par un % suivi de la représentation hexadécimale à deux chiffres de sa valeur ASCII.
Par exemple :
- Un espace devient
%20(valeur ASCII 32, hex 20). - Un point d'exclamation (!) devient
%21(valeur ASCII 33, hex 21). - Une esperluette (&) devient
%26(valeur ASCII 38, hex 26).
Tableau des caractères encodés courants
| Caractère | Valeur encodée | Description |
|---|---|---|
| Espace | %20 ou + |
Dépend de la partie de l'URL |
! |
%21 |
Point d'exclamation |
# |
%23 |
Dièse (identifiant de fragment) |
$ |
%24 |
Signe dollar |
& |
%26 |
Esperluette (délimiteur de requête) |
' |
%27 |
Guillemet simple |
( |
%28 |
Parenthèse gauche |
) |
%29 |
Parenthèse droite |
* |
%2A |
Astérisque |
+ |
%2B |
Signe plus |
, |
%2C |
Virgule |
/ |
%2F |
Barre oblique (délimiteur de chemin) |
: |
%3A |
Deux-points |
; |
%3B |
Point-virgule |
= |
%3D |
Signe égal (paramètre de requête) |
? |
%3F |
Point d'interrogation (début de requête) |
@ |
%40 |
Arobase |
Gestion des espaces : %20 vs +
Vous avez peut-être remarqué que les espaces sont parfois encodés par %20 et d'autres fois par +.
%20est l'encodage standard pour un espace dans n'importe quelle partie de l'URI.+est spécifiquement utilisé pour les espaces dans la chaîne de requête (query string) d'une URL (après le?). Cela provient de l'ancien type de médiaapplication/x-www-form-urlencodedutilisé par les formulaires HTML.
Les outils et bibliothèques modernes gèrent généralement cela automatiquement, mais c'est un point de confusion courant pour les développeurs.
Encodage URL en programmation
La plupart des langages de programmation fournissent des fonctions intégrées pour l'encodage et le décodage URL.
JavaScript
// Encodage d'un composant d'URI
const requête = "bonjour le monde & les amis";
const encodé = encodeURIComponent(requête);
console.log(encodé); // Résultat : bonjour%20le%20monde%20%26%20les%20amis
// Décodage
const décodé = decodeURIComponent(encodé);
console.log(décodé); // Résultat : bonjour le monde & les amis
Python
import urllib.parse
requête = "bonjour le monde & les amis"
encodé = urllib.parse.quote(requête)
print(encodé) # Résultat : bonjour%20le%20monde%20%26%20les%20amis
décodé = urllib.parse.unquote(encodé)
print(décodé) # Résultat : bonjour le monde & les amis
PHP
<?php
$requête = "bonjour le monde & les amis";
$encodé = urlencode($requête);
echo $encodé; // Résultat : bonjour+le+monde+%26+les+amis
$décodé = urldecode($encodé);
echo $décodé; // Résultat : bonjour le monde & les amis
?>
Foire aux questions (FAQ)
1. Dois-je encoder l'URL entière ou seulement des parties ?
Vous ne devez généralement encoder que les valeurs de vos paramètres de requête ou des segments spécifiques du chemin. L'encodage de l'URL entière (y compris les séparateurs http://, :, et /) la rendra invalide en tant qu'URI. Utilisez encodeURIComponent() pour les valeurs et encodeURI() pour l'URI entière (il ignorera les délimiteurs).
2. L'encodage URL est-il identique à l'encodage Base64 ?
Non. L'encodage URL (encodage en pourcentage) est utilisé pour échapper des caractères dans une URL. Base64 est utilisé pour représenter des données binaires sous forme d'une chaîne de 64 caractères ASCII. Ils servent des objectifs complètement différents.
3. Pourquoi ai-je reçu une erreur "Malformed URI" ?
Cela se produit généralement lors du décodage lorsque la chaîne contient un caractère % qui n'est pas suivi de deux chiffres hexadécimaux valides. Par exemple, index.php?nom=100% provoquerait une erreur car le % à la fin n'est pas un début valide de séquence encodée.
4. L'encodage URL prend-il en charge l'Unicode ?
Oui. L'encodage URL moderne (basé sur UTF-8) gère l'Unicode en convertissant d'abord le caractère en sa séquence d'octets UTF-8, puis en encodant chaque octet en pourcentage. Par exemple, le caractère 汉 (UTF-8 : E6 B1 89) devient %E6%B1%89.
Conclusion
L'encodage URL est un outil simple mais vital pour assurer l'intégrité des données sur le Web. Que vous construisiez une application Web, que vous déboguiez des appels d'API ou que vous soyez simplement curieux de savoir comment fonctionne le Web, il est essentiel de comprendre l'encodage en pourcentage.
Besoin d'encoder ou de décoder une chaîne rapidement ? Utilisez notre Outil d'encodage/décodage URL pour le faire en quelques secondes !