Codage en pourcentage d'URL : pourquoi les URL remplacent les espaces par %20 (Guide RFC 3986)

Les URL sont limitées à un jeu de caractères ASCII strict. Les caractères spéciaux (espaces, accents, esperluettes, barres obliques) doivent être codés sous forme de séquences codées en pourcentage (par exemple, espace = %20) pour être transmis en toute sécurité sur Internet.

URL containing special characters being encoded to percent-encoded safe format

Pourquoi les URL nécessitent un codage de caractères spécial

Comparison between RFC 3986 percent-20 and application-form-urlencoded plus encoding for spaces

Les URL sont transmises sur des réseaux utilisant le protocole HTTP. La spécification HTTP (et son prédécesseur, les normes de protocole Internet) restreint les URL à un sous-ensemble de caractères US-ASCII, en particulier les caractères dont les valeurs d'octet sont comprises entre 0x21 et 0x7E.

Les caractères en dehors de cette plage, notamment les espaces, les caractères accentués (é, ñ, ü), les caractères chinois/japonais/coréens et de nombreux symboles, ne sont pas sécurisés dans les URL sans encodage.

Pourquoi des espaces en particulier ? HTTP utilise des espaces comme délimiteur entre la méthode, l'URL et la version du protocole dans la ligne de requête :

GET /search?q=hello world HTTP/1.1

Le serveur considère "hello" comme la fin de l'URL et "world" comme une partie non valide de la chaîne de version HTTP. L'URL est incorrecte.

La solution : Le codage en pourcentage (défini dans la RFC 3986) convertit les caractères non sécurisés en une notation sécurisée %XX où XX est la valeur de l'octet hexadécimal.


Fonctionnement du codage en pourcentage

JavaScript URL encoding API difference between encodeURI and encodeURIComponent functions

Hexadecimal ASCII byte lookup table for the eight most frequently encoded URL special characters

Chaque caractère en UTF-8 comporte un à quatre octets. L'encodage en pourcentage convertit chaque octet en % suivi de deux chiffres hexadécimaux :

PersonnageUTF-8 OctetPourcentage codé
Espace0x20%20
#0x23%23
&0x26%26
=0x3D%3D
/0x2F%2F
é0xC3 0xA9%C3%A9
中0xE4 0xB8 0xAD%E4%B8%AD

Une URL contenant des caractères chinois tels que https://example.com/搜索 devient : https://example.com/%E6%90%9C%E7%B4%A2


Caractères réservés et personnages non réservés

Reserved versus unreserved URL character set comparison showing characters that must be percent-encoded

Caractères non réservés (ne jamais les coder) : A-Z a-z 0-9 - _ . ~ Ceux-ci sont sécurisés dans tous les contextes d'URL et doivent toujours apparaître non codés.

Caractères réservés (encodés lorsqu'ils sont utilisés comme données et non comme délimiteurs) :  : / ? # [ ] @ ! $ & ' ( ) * + , ; = Ces caractères ont une signification particulière dans les URL. Encodez-les lorsqu'ils apparaissent sous forme de données littérales dans la valeur d'un paramètre de requête.

Exemple : URL de requête de recherche :

https://example.com/search?q=cats&dogs

Ceci est ambigu : la requête est-elle "chats" ou "chats et chiens" ? Avec encodage :

https://example.com/search?q=cats%26dogs

L'esperluette est désormais codée sous forme de données, et non comme séparateur de paramètre de requête.


Encodage et décodage d'URL sur ToolDolfen

ToolDolfen in-browser URL encoder and decoder client-side execution workflow

  1. Ouvrez l'Encodeur et Décodeur d’URL.
  2. Pour encoder : Collez une URL ou un composant d'URL contenant des caractères spéciaux. Cliquez sur Encoder.
  3. Pour décoder : Collez une URL ou une chaîne codée en pourcentage pour voir l'original lisible par l'homme.

L'outil gère à la fois les URL complètes et les composants d'URL (valeurs de paramètres de requête individuels). Pour le codage URL complet, seuls les caractères non réservés sont codés ; pour le codage des composants, les caractères réservés sont également codés.

Guides complémentaires recommandés

Explorez les didacticiels et utilitaires complémentaires de ce groupe de sujets pour améliorer votre flux de travail numérique :

HEX, RVB et HSL : le guide complet des modèles de couleurs pour CSS et designTutoriel pratique étape par étape avec des normes vérifiées et des flux de travail dans le navigateur.Le Mathématiques des mots de passe forts : entropie, directives NIST et longueur du mot de passeTutoriel pratique étape par étape avec des normes vérifiées et des flux de travail dans le navigateur.Guide de conversion Markdown vers HTML : Tableaux GFM, mathématiques et monde réel GotchasTutoriel pratique étape par étape avec des normes vérifiées et des flux de travail intégrés au navigateur.Comment diviser des fichiers PDF et extraire des plages de pages spécifiquesFlux de travail multiformat complémentaire connecter des données et des outils multimédias associés.
Utilitaire recommandé : Encodeur/décodeur d'URLExécutez ce flux de travail en direct dans votre navigateur sans aucun téléchargement sur le serveur et avec 100 % de confidentialité côté client.
Encodeur et Décodeur d’URL
Encodeur et Décodeur d’URL

Foire Aux Questions

Trouvez des réponses rapides et vérifiées aux questions fréquentes sur ce flux de travail.

Quelle est la différence entre %20 et + pour les espaces dans les URL ?

%20 est le codage en pourcentage standard RFC 3986 pour un espace dans les URL. Le signe + est une ancienne convention de codage de formulaire HTML (application/x-www-form-urlencoded) pour les espaces dans les paramètres de requête. Alors que + est largement pris en charge dans les chaînes de requête, %20 est plus universellement correct et est recommandé pour les chemins d'URL.

Y a-t-il des caractères qui ne doivent jamais être codés dans une URL ?

Oui. Les caractères non réservés (A-Z, a-z, 0-9, -, _, ., ~) ne doivent jamais être codés : ils sont sécurisés dans tous les contextes d'URL. Les caractères réservés (/, ?, #, &, =, @, !, $) ne doivent pas être codés lorsqu'ils remplissent leur rôle fonctionnel (par exemple, / séparant les segments de chemin).

Pourquoi mon URL renvoie-t-elle une erreur 404 lorsque je la colle avec des caractères spéciaux ?

De nombreux serveurs Web rejettent les URL contenant des caractères spéciaux non codés. Si votre URL contient des espaces, des crochets, des accolades ou des caractères non-ASCII (lettres accentuées, caractères CJK), encodez-les d'abord à l'aide de l'encodeur d'URL.

Bilal Ahmad