Qu'est-ce que l'encodage URL et pourquoi est-ce important ?

25 Apr 2026 1,435 words

Qu'est-ce que l'encodage URL et pourquoi est-ce important ?

L'encodage URL, également connu sous le nom d'encodage en pourcentage (percent encoding), convertit les caractères dans un format pouvant être transmis en toute sécurité dans les URL. Chaque fois que vous visitez un site web, soumettez un formulaire ou envoyez une requête API, l'encodage URL travaille en arrière-plan pour garantir que les caractères spéciaux et le texte non ASCII sont transmis correctement. Sans encodage URL, des actions simples comme rechercher « café & thé » briseraient la structure de l'URL, provoquant potentiellement des erreurs ou des vulnérabilités de sécurité.

Comprendre le problème

Les URL ont un ensemble restreint de caractères autorisés, défini par la RFC 3986. Les caractères autorisés se répartissent en deux catégories :

  • Caractères réservés : :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ;, =
  • Caractères non réservés : A-Z, a-z, 0-9, -, ., _, ~

Tout caractère en dehors de ces ensembles doit être encodé. Même les caractères réservés doivent être encodés s'ils sont utilisés dans un contexte où ils auraient normalement une signification particulière. Par exemple, le caractère & est réservé pour séparer les paramètres de requête. Si vous souhaitez inclure un & littéral dans une valeur de paramètre, il doit être encodé en %26.

Pourquoi l'encodage URL est important

1. Préserver la structure de l'URL

Les caractères spéciaux comme ?, & et # ont des significations précises dans les URL. Le ? marque le début de la chaîne de requête, & sépare les paramètres de requête et # indique un identifiant de fragment. Si l'entrée utilisateur contient l'un de ces caractères, ils doivent être encodés pour éviter que l'URL ne soit mal interprétée.

Considérez une recherche pour « Q&A session ». Sans encodage, cette URL serait brisée :

https://example.com/search?q=Q&A session

Le navigateur interprète « A session » comme un second paramètre de requête nommé « A session » au lieu d'une partie du terme de recherche. La version encodée préserve correctement le sens voulu :

https://example.com/search?q=Q%26A%20session

2. Gérer les caractères spéciaux

Les espaces ne sont pas autorisés dans les URL. Ils doivent être encodés en %20 ou + (ce dernier uniquement dans les chaînes de requête). De même, les caractères comme les lettres accentuées (é, ü, ñ), les symboles (£, ©, ®) et les écritures non latines (chinois, arabe, cyrillique) doivent être encodés. L'encodage URL les convertit en un signe pourcentage suivi de leurs valeurs d'octet UTF-8 en hexadécimal.

3. Sécurité

L'encodage URL est une mesure de sécurité critique contre les attaques par injection. Les attaquants peuvent manipuler les URL pour injecter du contenu malveillant, rediriger les utilisateurs vers des sites de phishing ou effectuer des attaques de script intersite (XSS). En encodant les entrées utilisateur avant de les inclure dans les URL, vous empêchez les attaquants de sortir de la structure d'URL prévue. Par exemple, l'encodage empêche un attaquant d'injecter un schéma javascript: ou d'ajouter des paramètres de requête inattendus.

4. Internationalisation (support IRI)

Le web moderne prend en charge les identifiants de ressources internationalisés (IRI), qui permettent les caractères non ASCII dans les URL. Cependant, les IRI doivent être convertis en URL ASCII encodées avant la transmission. Ce processus, appelé Internationalisation des noms de domaine dans les applications (IDNA), encode les noms de domaine en utilisant le Punycode et encode le reste de l'URL en utilisant l'encodage en pourcentage. Cela garantit que les utilisateurs peuvent saisir des URL dans leur langue maternelle tout en maintenant la compatibilité avec l'infrastructure sous-jacente limitée à l'ASCII.

Comment fonctionne l'encodage URL

Les caractères sont encodés sous la forme % suivi de deux chiffres hexadécimaux représentant la valeur d'octet du caractère en UTF-8 (ou ASCII pour les caractères sur un seul octet). Voici un tableau des encodages courants :

Caractère Encodé Raison
Espace %20 Non autorisé dans les URL
! %21 Caractère réservé
" %22 Non autorisé
# %23 Identifiant de fragment
$ %24 Réservé
% %25 Caractère d'échappement lui-même
& %26 Séparateur de requête
' %27 Réservé
( %28 Réservé
) %29 Réservé
+ %2B Réservé (espace dans la requête)
, %2C Réservé
/ %2F Séparateur de chemin
: %3A Réservé
; %3B Réservé
< %3C Non autorisé
> %3E Non autorisé
? %3F Début de requête
@ %40 Réservé
[ %5B Réservé
] %5D Réservé
~ %7E En fait autorisé, mais parfois encodé

Notez que le signe pourcentage lui-même est encodé en %25. Cela est nécessaire car % introduit un caractère encodé, donc un signe pourcentage littéral doit être échappé.

L'encodage URL en programmation

JavaScript

JavaScript fournit deux fonctions pour l'encodage URL avec des objectifs différents :

// encodeURI: Encodes a complete URI, preserving characters that have special meaning
const url = encodeURI("https://example.com/search?q=hello world");
// Result: https://example.com/search?q=hello%20world
// Note: encodeURI does NOT encode &, ?, #, etc.

// encodeURIComponent: Encodes a URI component (query parameter value)
const query = encodeURIComponent("coffee & tea");
// Result: coffee%20%26%20tea
// This encodes all special characters, making it safe for parameter values

// Decoding
const decoded = decodeURIComponent("coffee%20%26%20tea");
// Result: coffee & tea

La distinction critique : utilisez encodeURIComponent pour les entrées utilisateur qui vont dans les paramètres de requête, les segments de chemin ou les identifiants de fragment. Utilisez encodeURI uniquement lorsque vous encodez une URL entière dont la structure est déjà en place.

Python

Le module urllib.parse de Python fournit des fonctionnalités équivalentes :

from urllib.parse import quote, unquote, urlencode

# Encode a single value
encoded = quote("coffee & tea", safe='')
# Result: coffee%20%26%20tea

# Encode query parameters
params = urlencode({'q': 'coffee & tea', 'page': 1})
# Result: q=coffee+%26+tea&page=1

# Decode
decoded = unquote("coffee%20%26%20tea")
# Result: coffee & tea

Autres langages

  • PHP : urlencode() et urldecode()
  • Ruby : URI.encode() et URI.decode()
  • Java : URLEncoder.encode() et URLDecoder.decode()
  • C# : HttpUtility.UrlEncode() et HttpUtility.UrlDecode()

Tous les principaux langages de programmation fournissent des fonctions d'encodage URL intégrées. Utilisez toujours ces fonctions de bibliothèque plutôt que d'écrire les vôtres, car elles gèrent correctement les cas particuliers.

Erreurs courantes et comment les éviter

Erreur 1 : Encoder une URL entière

Appliquer encodeURIComponent (ou l'équivalent) à une URL entière encodera les caractères ://, ? et /, brisant la structure de l'URL. Encodez toujours uniquement les composants individuels. Utilisez encodeURI pour l'URL complète ou encodez chaque valeur de paramètre séparément.

Erreur 2 : Double encodage

Le double encodage se produit lorsque vous encodez un texte déjà encodé. Par exemple, encoder %20 à nouveau produit %2520 (le % devient %25). Cela arrive souvent lorsque les données passent par plusieurs étapes de traitement. Pour éviter cela, établissez une politique d'encodage claire : encodez une fois au point de saisie utilisateur et décodez une fois au point d'utilisation.

Erreur 3 : Oublier d'encoder les entrées utilisateur

C'est l'erreur la plus dangereuse. Toute entrée utilisateur apparaissant dans une URL doit être encodée, y compris :

  • Les paramètres de requête de recherche
  • Les valeurs des champs de formulaire dans les requêtes GET
  • Les segments de chemin d'URL dérivés de données utilisateur
  • Les identifiants de fragment

Ne pas encoder les entrées utilisateur peut entraîner des dysfonctionnements, une corruption de données ou des vulnérabilités de sécurité.

L'outil d'encodage/décodage URL

L'outil URL Encoder/Decoder sur Help2Code offre un moyen simple d'encoder et de décoder des composants URL. Collez votre texte, cliquez sur encoder ou décoder, et obtenez le résultat instantanément. C'est utile pour déboguer des problèmes d'URL, préparer des requêtes API ou apprendre comment fonctionne l'encodage en expérimentant avec différentes entrées.

Conclusion

L'encodage URL est un concept fondamental du développement web qui garantit que les données sont transmises de manière sûre et correcte sur Internet. En comprenant comment il fonctionne et quand l'utiliser, vous pouvez construire des applications web plus robustes et sécurisées. Encodez toujours les entrées utilisateur, utilisez la fonction d'encodage appropriée au contexte et ne doublez jamais l'encodage. L'outil URL Encoder/Decoder est une ressource pratique pour tester et déboguer vos besoins d'encodage.


About this article

Découvrez ce qu'est l'encodage URL, pourquoi il est important pour le développement web et comment l'utiliser correctement.


Related Articles


Related Tools

Help2Code Logo
Menu