Ogni caractère d'une adresse Web deve provenir d'un petit insieme sûr su lequel i navigateurs, i serveurs, i proxys e i log s'accordent tous. Quando vous devez placer quelque chose a l'extérieur d'un link - un espace, una esperluette, una lettre accentuée o un emoji - il deve prima être codé in URL. L'encodage URL, également appelé encodage in pourcentage, e la norme qui remplace questi caractères par un signe di pourcentage suivi di loro valore d'byte in hexadécimal, di sorte qu'un espace devient %20 e & devient %26. Questa guida explique questo qu'est l'encodage URL, quels caractères in ont besoin, come fonctionne il format %XX e il choix encodeURIComponent vs encodeURI qui fait trébucher la plupart dei sviluppatori - con dei esempi concrets que vous puoi copier.
Risposta rapida
Le codage URL (codage in pourcentage) remplace i caractères non sécurisés o réservés in un URL par un % suivi di deux chiffres hexadécimaux représentant l'byte del caractère in UTF-8. Un espace devient %20, una esperluette devient %26 e un e (é) accentué devient %C3%A9. Utilisez encodeURIComponent per i valori individuelles que vous déposez in un URL e encodeURI per un URL complet que vous non souhaitez non diviser.
Qu'est-ce que l'encodage URL ?
Le codage URL e un moyen di représenter dei caractères in un localisateur di ressources uniforme (URL) in utilisant solo un jeu di caractères limité e universellement sûr. La norme URL (RFC 3986) autorise l'apparition littérale d'une poignée di caractères seulement : i lettres ASCII A-Z e a-z, i chiffres 0-9 e alcuni symboles. Tout il reste - i espaces, la plupart dei signes di ponctuation e tutti i caractères non inglese - deve être converti in una séquence codée in pourcentage avant di pouvoir voyager in tutta sicurezza a l'intérieur d'un lien.
La raison in e que i URL traversent di nombreux systèmes e que certains caractères ont una signification particulière per questi systèmes. Un espace puo être supprimé silencieusement o transformé in +, un # démarre il fragment e un ? démarre la stringa di requête. Le codage in pourcentage rimuove l'ambiguïté in transformant tutto caractère problématique in un codice signifiant « ce sono dei données, non un délimiteur ».
Caractères réservés o non réservés
La spécification URL divise i caractères in groupes. Savoir lequel e lequel vous indica esattamente questo qui deve être codé e questo qui deve être laissé tel quel.
Caractères non réservés (jamais codés)
Ces caractères possono sempre être utilisés in tutta sicurezza tels quels n'importe dove in un URL e non devono non être codés :
- Lettres majuscules : A-Z
- Lettres minuscules : a a z
- Chiffres : 0-9
- Quatre symboles : trait d'union (-), trait di soulignement (_), point (.) e tilde (~)
Caractères réservés (encodés lorsqu'ils sono utilisés comme données)
Les caractères réservés ont un rôle spécial in un URL : ils agissent comme dei délimiteurs qui séparent una partie d'une autre. Ils non sono in sicurezza que lorsqu'ils font questo travail. Si un caractère réservé apparaît a l'intérieur d'une valore plutôt que comme séparateur, il deve être codé afin qu'il non soit non confondu con un délimiteur.
- Délimiteurs di chemin e d'autorité : / : @
- Délimiteurs di requêtes e di fragments : ? # & =
- Sous-délimiteurs : ! $ & ' ( ) * + , ; =
Par exemple, il & in https://example.com/search?q=cats&sort=new sépare deux paramètres di requête e reste donc littéral. Mais si vous recherchez l'expression "chats e chiens", il & a l'intérieur di questa valore deve devenir %26 - sinon il server lit &dogs comme deuxième paramètre.
Le format %XX expliqué
Le codage in pourcentage suit una regola simple : un signe di pourcentage (%) suivi di deux chiffres hexadécimaux. Ces deux chiffres sono la valore d'un seul byte écrit in base 16 (00 in FF, soit 0-255 in décimal). Per coder un caractère, vous recherchez sa valore in byte e l'écrivez après il %.
- L'espace e di 32 in décimal, soit 20 in hexadécimal - donc un espace devient %20.
- L'esperluette & e 38 decimale = 26 hex - donc & devient %26.
- Le signe égal = e 61 decimale = hexadécimal 3D - donc = devient %3D.
- Le point d'interrogation ? e 63 decimale = 3F hex - alors ? devient %3F.
Les caractères in la plage ASCII (0-127) sono constitués d'un seul byte, ils codent donc sempre selon una séquence %XX. Les caractères in dehors dell'ASCII sono prima convertis in loro byte UTF-8 - qui possono être di deux, trois o quatre byte - e ogni byte devient son propre %XX. C'est perche la lettre accentuée é (U+00E9) codice in %C3%A9 : sa forme UTF-8 e constituée dei deux byte C3 e A9.
encodeURIComponent vs encodeURI - quando utilizzare chacun
JavaScript vous offre deux fonctions intégrées per il codage in pourcentage, e scegliere la mauvaise e l'erreur di codage URL la piu courante. La différence réside in i caractères réservés qu'ils laissent seuls.
encodeURIComponent - per una seule valore
encodeURIComponent encode presque tutto questo qui non e un caractère non réservé, e incluso i délimiteurs réservés /? : @ & = + $ #. Utilisez-le per una seule donnée que vous insérez in un URL : una valore di paramètre di requête, un segment di chemin o un champ di formulaire. Parce qu'il échappe a & e =, una valore qui i contient non brisera non la stringa di requête environnante.
encodeURI - per un URL entier
encodeURI e conçu per coder un URL complet e gia assemblé. Il laisse i délimiteurs réservés intacts - :, /, ?, #, & e = passent inchangés - di sorte que il URL conserve sa structure. Il codice solo dei caractères qui non sono mai validi nulle part, comme i espaces. Utilisez-le quando vous disposez d'un URL complet pouvant contenir un caractère illégal e que vous non souhaitez non modifier ses parties.
Règle générale
Encodez i parties, non il tout. Créez un URL in exécutant prima encodeURIComponent su ogni valore individuelle, puis joignez-les con &, =, / e ? délimiteurs vous-même. Accédez a encodeURI solo quando vous recevez una stringa URL complète a nettoyer.
Deux remarques pratiques : encodeURIComponent n'échappe non ai caractères ! ' ( ) *, donc un parser strict puo avoir besoin di i remplacer manuellement. Et n'encodez mai una stringa gia encodée - cela transforme ogni % in %25, donc %20 devient %2520, un bug classique di double encodage qui produit dei link rompus.
Exemples travaillés
Voici a quoi ressemblent i caractères courants prima e dopo l’encodage. Ogni ligne se lit comme un caractère - questo que e - sotto forme codée.
- Espace - séparateur di mots - %20 (un + e également utilisé per i espaces in i stringhe di requête ; voir ci-dessous)
- & - esperluette - %26
- = - signe égal - %3D
- ? - point d'interrogation - %3F
- / - barre oblique - %2F
- # - démarrage del hachage/fragment - %23
- + - signe piu - %2B
- é - e con un accent aigu (non-ASCII, 2 UTF-8 byte) - %C3%A9
- 😀 - emoji (4 UTF-8 byte) - %F0%9F%98%80
Encoder una valore con dei espaces e dei symboles
Supposons que vous souhaitiez transmettre l'expression di ricerca « chats e chiens = amusant » comme valore di requête unique. L'exécution d'encodeURIComponent dessus produit cats%20%26%20dogs%20%3D%20fun. Ogni espace, il & e il = sono échappés, donc il tutto e traité comme una valore plutôt que comme trois paramètres distincts.
Un esempio di stringa di requête complète
En l'assemblant, imaginez una pagina di ricerca qui prend una requête e una catégorie. Vous encodez ogni valore séparément, puis assemblez il URL :
- Valeur brute della requête : chats e chiens
- Valeur brute della catégorie : pets/animals
- Requête codée : cats%20%26%20dogs
- Catégorie codée : pets%2Fanimals
- URL final : https://example.com/search?q=cats%20%26%20dogs&category=pets%2Fanimals
Notez que i & e = tra q=... etcategory=... restent littéraux car ils font loro travail di délimiteurs, tandis que il & a l'intérieur della valore di requête e il / a l'intérieur della valore di catégorie sono codés car questo sono dei données. C'est esattamente questo que vous donne l'encodage di ogni valore con encodeURIComponent, puis l'assemblage dei éléments vous-même.
Espace : %20 o + ?
Dans il chemin d'un URL, un espace e sempre di %20. Dans una stringa di requête, l'ancien codage di formulaire (application/x-www-form-urlencoded) utilise plutôt + per un espace. Les deux décodent in espace, mais ils non sono non interchangeables partout - lors del décodage, verifica si la source a utilisé %20 o + afin di restaurer correctement il testo original.
Questions fréquemment posées
Qu’est-ce que il codage URL in termes simples ?
L'encodage URL e un moyen d'inclure in tutta sicurezza dei caractères spéciaux in una adresse Web in i remplaçant par un % e un codice a deux chiffres. Étant donné que i URL non possono contenir qu'un insieme limité di caractères, tutto il reste - comme un espace, una esperluette o una lettre accentuée - e converti in son équivalent codé in pourcentage (un espace devient %20) affinche il link reste valide.
Pourquoi i URL contiennent-ils %20 ?
%20 e la forme codée in pourcentage d'un espace. Les espaces non sono non autorisés in un URL, donc lorsqu'un link in contient un - souvent a partir d'un nom di file o d'un terme di ricerca - il e remplacé par %20. Quando la pagina se charge, il server o il browser décode %20 in un espace.
Quelle e la différence tra encodeURI e encodeURIComponent ?
encodeURIComponent codice una valore unique e échappe ai délimiteurs réservés (& = ? / #), questo qui la rend appropriée per un paramètre di requête o un segment di chemin. encodeURI codice un URL intero e laisse questi délimiteurs intacts affinche l'adresse conserve sa structure. Utilisez encodeURIComponent per i pièces e encodeURI per un URL complet.
Quels caractères devono être codés in URL ?
Uniquement i caractères non réservés - A-Z, a-z, 0-9 e - _ . ~ - sono sempre in sécurité. Tout il reste deve être codé lorsqu'il apparaît a l'intérieur d'une valore : i espaces, la plupart dei signes di ponctuation, i délimiteurs réservés (/ ? : @ & = + $ , ; # ! ' ( ) *), e tutti i caractères non-ASCII comme i lettres accentuées e i emoji.
Le codage URL est-il il stesso que il chiffrement o Base64 ?
L'encodage URL non e un cryptage e n'offre aucune sécurité. Il s'agit d'une transformation di testo entièrement réversible qui permet solo ai caractères di voyager in tutta sicurezza in un URL, e n'importe qui puo il décoder instantanément. Il diffère également di Base64, qui réencode i dati binaires in un alphabet di 64 caractères in un but différent.
Comment décoder una stringa codée in URL ?
Inversez il processus : ogni séquence %XX e reconvertie in l'byte qu'elle représente, e i byte consécutifs sono lus al format UTF-8 per récupérer dei caractères comme é o emoji. Dans JavaScript, decodeURIComponent fait cela ; un strumento di décodage URL fait di stesso in tuo browser e affiche una erreur claire si l'entrée a una séquence mal formée comme un % solitaire.
Encoder o décoder un URL instantanément
Utilisez l'[Encodeur/Décodeur URL] gratuito (/developer-tools/url-encoder-decoder) per encoder in pourcentage n'importe quel testo o décoder un URL codé - basculez tra encodeURIComponent e encodeURI in un clic, e tutto s'exécute in tuo navigateur.