Encodage d'URL : Tout ce que vous devez savoir
· 12 min de lecture
Table des matières
- Comprendre l'encodage d'URL
- Pourquoi l'encodage d'URL est nécessaire
- Comment fonctionne l'encodage d'URL
- Caractères qui nécessitent un encodage
- Cas d'utilisation courants de l'encodage d'URL
- Encodage de différents jeux de caractères
- Pratiques d'encodage avancées
- Erreurs courantes et comment les éviter
- Encodage d'URL dans les langages de programmation
- Considérations de sécurité
- Questions fréquemment posées
- Articles connexes
Comprendre l'encodage d'URL
L'encodage d'URL, également connu sous le nom d'encodage en pourcentage, est un mécanisme fondamental pour assurer une transmission fiable des données sur Internet. Il convertit les caractères qui ne sont pas autorisés dans les URL en un format qui peut être transmis et interprété en toute sécurité par les navigateurs web, les serveurs et d'autres infrastructures Internet.
À la base, l'encodage d'URL résout un problème simple : les URL ne peuvent contenir qu'un ensemble limité de caractères du jeu de caractères ASCII. Lorsque vous devez inclure des caractères en dehors de cet ensemble, qu'il s'agisse de symboles spéciaux, d'espaces ou de caractères non latins, ils doivent être encodés dans un format universellement reconnu.
Le processus d'encodage remplace les caractères problématiques par un signe de pourcentage (%) suivi de deux chiffres hexadécimaux représentant le code ASCII ou UTF-8 du caractère. Cela garantit que chaque composant de votre URL est transmis exactement comme prévu, sans mauvaise interprétation ou perte de données.
Conseil rapide : Utilisez notre outil Encodeur et décodeur d'URL pour encoder ou décoder instantanément n'importe quelle chaîne d'URL sans écrire de code.
Pourquoi l'encodage d'URL est nécessaire
La nécessité de l'encodage d'URL découle des contraintes de conception originales d'Internet et de la spécification d'URL définie dans la RFC 3986. Les URL ont été conçues pour fonctionner avec un jeu de caractères limité afin d'assurer la compatibilité entre différents systèmes, protocoles et régions géographiques.
Sans encodage d'URL, plusieurs problèmes critiques surviendraient :
- Ambiguïté dans la structure de l'URL : Les caractères spéciaux comme
?,&et#ont des significations spécifiques dans les URL. Si ces caractères apparaissent dans vos données sans encodage, ils seront interprétés comme des délimiteurs d'URL plutôt que comme du contenu. - Incompatibilité des jeux de caractères : Différents systèmes peuvent interpréter la même séquence d'octets différemment, entraînant des données corrompues ou des requêtes échouées.
- Violations de protocole : HTTP et d'autres protocoles Internet s'attendent à ce que les URL se conforment à des règles de formatage spécifiques. Les caractères non encodés peuvent causer des erreurs de protocole.
- Vulnérabilités de sécurité : Les caractères spéciaux non encodés peuvent être exploités pour des attaques par injection ou pour contourner les filtres de sécurité.
Considérez une requête de recherche pour "chats & chiens" dans une URL. Sans encodage, l'esperluette serait interprétée comme un séparateur de paramètres, brisant potentiellement votre requête en deux paramètres distincts. L'encodage d'URL transforme cela en chats%20%26%20chiens, préservant la signification prévue.
La limitation ASCII
Les URL sont construites sur le jeu de caractères ASCII, qui ne comprend que 128 caractères. Parmi ceux-ci, seul un sous-ensemble, connu sous le nom de "caractères non réservés", peut apparaître dans les URL sans encodage. Ces caractères non réservés incluent :
- Lettres majuscules et minuscules (A-Z, a-z)
- Chiffres décimaux (0-9)
- Trait d'union (
-), point (.), trait de soulignement (_) et tilde (~)
Tout le reste nécessite un encodage pour assurer une transmission et une interprétation appropriées sur Internet.
Comment fonctionne l'encodage d'URL
Le processus d'encodage d'URL suit un algorithme simple qui convertit les caractères en leurs équivalents encodés en pourcentage. Comprendre ce processus vous aide à résoudre les problèmes d'encodage et à écrire des applications web plus robustes.
L'algorithme d'encodage
Lorsqu'un caractère doit être encodé, le processus fonctionne comme suit :
- Identifier le caractère : Déterminer quel caractère nécessite un encodage en fonction du composant d'URL et des règles d'encodage.
- Obtenir la valeur d'octet : Convertir le caractère en sa représentation d'octet en utilisant l'encodage UTF-8 (ou ASCII pour les caractères de base).
- Convertir en hexadécimal : Exprimer chaque octet sous forme de deux chiffres hexadécimaux.
- Ajouter le préfixe de pourcentage : Préfixer chaque paire hexadécimale avec un signe de pourcentage (
%).
Par exemple, le caractère espace a une valeur ASCII de 32 (décimal) ou 20 (hexadécimal). Lorsqu'il est encodé, il devient %20. Le symbole arobase (@) a une valeur ASCII de 64 (décimal) ou 40 (hexadécimal), donc il s'encode en %40.
Encodage multi-octets UTF-8
Pour les caractères en dehors de la plage ASCII, l'encodage UTF-8 produit plusieurs octets, chacun étant encodé en pourcentage. L'emoji "😀" (visage souriant) est encodé en UTF-8 sous forme de quatre octets : F0 9F 98 80. Dans une URL, cela devient %F0%9F%98%80.
Cet encodage multi-octets garantit que les caractères de n'importe quelle langue ou ensemble de symboles peuvent être transmis en toute sécurité dans les URL, rendant le web véritablement international.
Conseil pro : Lors du débogage de problèmes d'encodage d'URL, utilisez les outils de développement de votre navigateur pour inspecter l'URL encodée réelle envoyée. L'onglet Réseau affiche la requête encodée brute, ce qui peut révéler des problèmes d'encodage.
Caractères qui nécessitent un encodage
Tous les caractères ne nécessitent pas d'encodage dans tous les contextes, mais comprendre quels caractères nécessitent un encodage et quand est essentiel pour créer des applications web fiables. Les exigences d'encodage varient en fonction de la partie de l'URL avec laquelle vous travaillez.
Caractères réservés
Les caractères réservés ont une signification spéciale dans la syntaxe d'URL et doivent être encodés lorsqu'ils sont utilisés comme données plutôt que comme délimiteurs. Ces caractères incluent :
| Caractère | Objectif dans les URL | Forme encodée |
|---|---|---|
: |
Sépare le schéma et l'hôte, délimiteur de port | %3A |
/ |
Séparateur de segment de chemin | %2F |
? |
Marque le début de la chaîne de requête | %3F |
# |
Marque le début de l'identifiant de fragment | %23 |
[ ] |
Délimiteurs d'adresse IPv6 | %5B %5D |
@ |
Sépare les identifiants de l'hôte | %40 |
! $ & ' ( ) * + , ; = |
Sous-délimiteurs à diverses fins | %21 %24 %26 %27 %28 %29 %2A %2B %2C %3B %3D |
Caractères non sûrs
Certains caractères sont considérés comme non sûrs car ils peuvent être modifiés ou mal interprétés pendant la transmission. Ceux-ci nécessitent toujours un encodage :
| Caractère | Pourquoi il n'est pas sûr | Forme encodée |
|---|---|---|
| Espace | Peut être supprimé ou converti en + |
%20 |
" |
Utilisé pour délimiter les URL en HTML | %22 |
< > |
Utilisé dans les balises HTML, peut être filtré | %3C %3E |
% |
Délimiteur d'encodage lui-même | %25 |
\ |
Séparateur de chemin sur certains systèmes | %5C |
^ ` { } | |
Non universellement pris en charge | %5E %60 %7B %7D %7C |
Encodage dépendant du contexte
Les exigences d'encodage diffèrent en fonction du composant d'URL avec lequel vous travaillez. Un caractère qui est sûr dans un contexte peut nécessiter un encodage dans un autre :
- Segments de chemin : Les barres obliques séparent les segments de chemin, elles ne doivent donc pas être encodées sauf si elles font partie d'un nom de segment lui-même.
- Paramètres de requête : Les esperluettes et les signes égal ont une signification spéciale, ils doivent donc être encodés lorsqu'ils apparaissent dans les valeurs de paramètres.
- Identifiants de fragment : La plupart des caractères sont autorisés, mais l'encodage est toujours recommandé pour la cohérence.
Cas d'utilisation courants de l'encodage d'URL
L'encodage d'URL apparaît dans de nombreux scénarios du monde réel. Comprendre ces cas d'utilisation vous aide à reconnaître quand et comment appliquer l'encodage dans vos propres projets.
Requêtes de recherche
Les moteurs de recherche s'appuient fortement sur l'encodage d'URL pour gérer les requêtes des utilisateurs. Lorsque vous recherchez "comment faire un gâteau ?" sur Google, l'URL devient quelque chose comme :
https://www.google.com/search?q=comment+faire+un+g%C3%A2teau%3F
Notez que les espaces sont encodés sous forme de signes plus (un encodage alternatif pour les espaces dans les chaînes de requête) et le point d'interrogation est encodé en %3F pour le distinguer du délimiteur de chaîne de requête.
Soumissions de formulaires
Lorsque les formulaires HTML sont soumis en utilisant la méthode GET, les données du formulaire sont encodées et ajoutées à l'URL. Considérez un formulaire de connexion avec des champs de nom d'utilisateur et de mot de passe :
https://example.com/login?username=jean.dupont%40example.com&password=M%40tdep%40sse%21
L'adresse e-mail et les caractères spéciaux dans le mot de passe sont correctement encodés pour éviter les problèmes d'interprétation.
Note de sécurité : N'envoyez jamais de données sensibles comme des mots de passe dans les paramètres d'URL. Cet exemple est uniquement à titre d'illustration. Utilisez toujours des requêtes POST avec HTTPS pour l'authentification.
Requêtes API
Les API RESTful incluent souvent des paramètres dans les URL qui nécessitent un encodage. Lors du filtrage des résultats ou du passage de structures de données complexes, un encodage approprié garantit que l'API reçoit exactement ce que vous aviez prévu :
https://api.example.com/users?filter=created_at>2024-01-01&sort=-name
Le symbole supérieur à dans le paramètre de filtre doit être encodé en %3E pour éviter toute confusion avec les entités HTML ou d'autres interprétations.
Téléchargements de fichiers
Lors de la diffusion de fichiers avec des noms non-ASCII, l'encodage d'URL garantit que le nom de fichier est transmis correctement :
https://example.com/downloads/Pr%C3%A9sentation%202024.pdf
Le "é" accentué dans "Présentation" est encodé en %C3%A9 (sa représentation UTF-8), permettant aux utilisateurs du monde entier de télécharger le fichier quel que soit l'encodage de caractères de leur système.
Partage sur les réseaux sociaux
Les plateformes de médias sociaux utilisent l'encodage d'URL lors du partage de liens avec du texte pré-rempli. Un lien de partage Twitter pourrait ressembler à :
https://twitter.com/intent/tweet?text=D%C3%A9couvrez%20cet%20article%21&url=https%3A%2F%2Fexample.com%2Farticle
Le texte du tweet et l'URL partagée sont tous deux encodés pour garantir que