Le bug qui m'a appris à respecter le codage en pourcentage était une redirection OAuth qui a échoué pour exactement un client. WP Adminify avait une intégration Google Fonts authentifiée via OAuth, et un utilisateur - un revendeur d'hébergement exécutant une configuration de proxy inversé que je fais toujours et n°39 ; je ne comprends pas bien - j'ai continué à obtenir redirect_uri_mismatch erreurs. Tout le monde allait bien. J'ai passé la plus grande partie de deux jours à blâmer sa configuration de serveur. Ensuite, j'ai finalement regardé l'URL réelle que son navigateur envoyait, caractère par personnage, et c'était là : %2520 où un espace aurait dû être. Son proxy était encodant le redirect_uri. mon plugin était aussi l'encoder Google a reçu une URL où l'espace avait été encodé deux fois - %20 devenu %2520- et rejeté toute la poignée de main Deux lignes de code l'ont réparé Deux jours pour le trouver.
C'était le numéro 39 ; même mon premier désastre d'encodage. Des années plus tôt, I et #39 ; j'ai construit un lien de campagne pour un lancement de plugin avec un paramètre UTM contenant un esperluette brute - quelque chose comme utm_campaign=black&friday. Le tableau de bord Analytics a montré une mystérieuse campagne appelée black et un paramètre fantôme appelé friday Cela ne correspondait à rien. L'esperluette avait silencieusement divisé mon paramètre en deux. Pas d'erreur. Pas d'avertissement. Juste discrètement de mauvaises données pendant onze jours avant que j'aie remarqué que les chiffres ne s'accumulaient pas.
Here' ; est le problème avec l'encodage d'URL : it' ; est l'un de ces problèmes qui semble trivial jusqu'à ce qu'il soit & #39 ;t. Les règles vivent dans une spécification de 2005 (RFC 3986), la réalité du navigateur vit dans une spécification différente (la WHATWG URL Standard), JavaScript vous donne trois fonctions différentes qui font toutes des choses légèrement différentes, et PHP vous en donne deux autres Se tromper et vous ne faites pas de plantage ; vous obtenez des paramètres tronqués, des flux OAuth cassés et des liens qui fonctionnent dans Chrome mais meurent dans un client de messagerie.
J'ai donc construit l'encodeur/décodeur que j'ai toujours voulu dans Toolz.dev. Ce guide explique comment l'utiliser et, plus important encore, comment fonctionne réellement le codage en pourcentage, donc le suivant %2520 Dans vos journaux vous prend deux minutes au lieu de deux jours.
tl;dr : Pour encoder ou décoder en ligne l'URL, collez votre chaîne dans le Encodeur/décodeur d'URL d'URL d'outils.dev, choisissez un mode et appuyez sur Encoder ou décoder. Il gère correctement UTF-8 et Emoji, et le bouton d'échange renvoie la sortie dans l'entrée afin que vous puissiez décoller les valeurs à double encodage (
%2520) à part une couche à la fois. Tout s'exécute côté client, donc les jetons et les ID de session dans vos URL ne touchent jamais un serveur. Encoder le paramètre valeurs Avec le mode composant, encodez uniquement les URL complètes lorsque vous savez pourquoi.
Principales caractéristiques
Encoder et décoder dans un seul outil
La moitié du temps dont j'ai besoin pour encoder une valeur L'autre moitié I' ; m regardant une URL noueuse d'un fichier journal et devant la décoder en quelque chose de lisible L'outil fait les deux à partir d'une boîte de saisie - Encoder et décoder se trouvent l'un à côté de l'autre comme deux boutons, donc là' ; n'est pas à la recherche d'une page séparée Collez une chaîne codée et appuyez sur Décoder ; tapez une valeur de requête brute et appuyez sur Encoder. Il fait aussi aller-retour à partir de ce qui vous a suivi la chaîne d'origine, byte for byte. Cela semble évident, mais I' ; a utilisé des outils en ligne qui vous ont fait un voyage n'arrondiver n'arrondiver ;
Composant vs Modes d'encodage complets en URL
Cette distinction est l'endroit où naissent la plupart des bugs d'encodage Le mode composant code tout ce qui est & #39 ; t sans réserve - y compris /, ?, &, et =- c'est ce que vous voulez pour une seule valeur de paramètre Le mode Full-URL laisse les caractères structurels seuls afin que l'URL fonctionne toujours comme une URL, ce que vous voulez lorsque vous nettoyez une adresse complète. En utilisant la mauvaise, soit vous brisez votre structure d'URL, soit vous laissez les caractères dangereux non codés. L'outil sépare les deux modes d'un clic en une seule liste déroulante, étiquetée avec la fonction JavaScript à laquelle chacun correspond - encodeURIComponent, encodeURI, application/x-www-form-urlencoded. J'ai fait des allers-retours sur cette dénomination. Les étiquettes d'intention ("encoder une valeur", "encoder une URL entière") liraient mieux le froid, mais les noms de fonction signifient que le panneau de référence sous la correspondance est un à un sur le code que vous êtes sur le point d'écrire, et c'est le moment où la plupart des gens sont réellement dans lesquels se trouvent. Si vous avez déjà tapé encodeURI Quand tu voulais dire encodeURIComponent- J'ai, plus d'une fois - le panneau est là pour l'attraper avant que vous expédiiez.
Gère les personnages UTF-8, emoji et internationaux
taper à la café Et tu reçois caf%C3%A9- le é correctement étendu à ses deux octets UTF-8. Tapez un emoji et vous obtenez un octet de 4 %. C'est là que les outils plus anciens et le Javascript obsolète escape() Fonction s'effondrer : ils supposent latin-1 ou produisent des %uXXXX des séquences qu'aucun serveur ne peut analyser Si vous et #39 ; construisez des URL avec du contenu généré par l'utilisateur - noms, requêtes de recherche, noms de ville dans n'importe quelle langue qui est & #39 ; t Anglais - gestion correcte de l'UTF-8 is' ; t un texte bengali, des limaces arabes, des termes de recherche chinois : tous codent pour des séquences de pourcentage RFC 3986 valides qui décodent de manière identique à l'autre extrémité.
Un bouton d'échange pour les valeurs à double encodage
le %2520 trap - un déjà codé %20 se faire encoder à nouveau - me coûte deux jours une fois, donc celui-ci est personnel Le décodage est une opération monocouche : %2520 Décodes %20, pas à un espace, car %25 est Le codage de %. Un passage vous donne une couche. Le bouton d'échange (⇄) déplace la sortie de nouveau dans la boîte de saisie de sorte que le passage suivant est à un clic de I & #39 ; a déballé URLs trois couches de profondeur après qu'ils ont passé par un proxy, un service de redirection, et un e-mail lien-wrapper - swap, decode, swap, decode, jusqu'à ce que la chaîne cesse de changer Cela " ; arrête de changer" ; moment est le signal réel que vous & #39 ; sont honnêtes sur ce que c'est : it& #39 ; est une boucle manuelle, pas un détecteur L'outil ne & #39 ; t drapeau %25XX pour vous, et je vais et viens sur la question de savoir si cela devrait - auto-décodage jusqu'à stable serait pratique tout de suite jusqu'à ce qu'il détruit silencieusement une valeur qui contenait légitimement un signe de pourcentage.
Trois modes, un panneau de référence explicite
Le sélecteur de mode comporte trois options - composant, URL complète et formulaire-urlencodé - et le panneau en dessous indique exactement les caractères auxquels ce mode s'échappe, qu'il préserve, et montre un exemple fonctionnel. Je l'ai ajouté car je ne me souvenais jamais si encodeURIComponent feuilles ~ seul (c'est le cas) ou si ! et * Survivre (ils le font, ce qui surprend les gens, puisque la RFC 3986 les classe comme des sous-délims plutôt que non réservés). Au lieu de mémoriser trois fonctions JavaScript, vous choisissez le mode par intention et relisez ce qu'il est sur le point de faire. Ce texte de référence est la partie que j'utilise le plus, et c'est ce que je voudrais si j'atterris sur la page froide à 1 h du matin.
100 % côté client - Rien ne quitte votre navigateur
Pensez à quoi et à quoi #39 ; s réellement à l'intérieur des URL que vous décodez : codes d'autorisation OAuth, jetons de réinitialisation de mot de passe, identifiants de session, adresses e-mail dans les liens de désabonnement, clés API un cadre utilement rempli dans une chaîne de requête Collez-les dans un outil côté serveur et ils atterrissent dans quelqu'un' ; s journaux d'accès, liés à votre IP, conservés pendant combien de temps L'encodeur Toolz.dev s'exécute entièrement dans votre navigateur - la conversion est quelques lignes de JavaScript s'exécutant localement, et aucune requête n'effectue avec vos données Ouvrez DevTools et regardez l'afficher le tablier ; minimum de sécurité ; c'est-9.
Gratuit, pas d'inscription, pas de limites
Pas de mur de compte, pas de quota quotidien n'agissant pour un outil qui effectue la transformation de chaînes, pas de "mise à niveau vers Pro pour décoder plus de 1 000 caractères." J'ai créé Toolz.dev parce que j'en avais assez des sites utilitaires qui interrompent une tâche de dix secondes avec une fenêtre contextuelle. Marquez-le, utilisez-le cinquante fois par jour, c'est fait.
Comment utiliser l'encodeur et le décodeur d'URL
Étape 1 : ouvrez l'outil et choisissez votre direction
se porter Toolz.dev/tools/encoder URL et déposez votre ficelle dans la boîte de gauche. Il existe deux boutons d'action, encoder et décoder, et vous en choisissez un après avoir collé plutôt que de définir une direction en premier. Si vous partez de quelque chose de lisible (une requête de recherche, une URL de redirection que vous êtes sur le point d'intégrer), appuyez sur Encode. Si vous partez de quelque chose de plein de signes de pourcentage (une entrée de journal, un en-tête de référence), appuyez sur Decoder. La sortie atterrit dans le volet de droite avec un bouton de copie dans son en-tête, et échangez et s'assoient à côté des deux boutons d'action.
Étape 2 : Choisissez le composant, l'URL complète ou le mode de formulaire
encoder un évaluer cela se situera dans un paramètre - un redirect_uri, un terme de recherche, n'importe quoi après un = Signe ? Utilisez le mode composant. il encode /, ?, &, et = Votre valeur ne peut donc pas casser l'URL environnante. encoder un URL complète qui n'a besoin que d'espaces et de caractères non ASCII nettoyés ? Utilisez le mode Full-URL, qui préserve les caractères structurels. Le troisième mode, form-urlencoded, est un encodage de composants avec des espaces écrits comme + au lieu de %20- choisissez-le lorsque vous et le numéro 39 ; vous construisez à la main un application/x-www-form-urlencoded corps. Notez que le mode affecte également le décodage : en mode Formulaire, + est reconvertie en espace avant décodage ; dans les deux autres, il reste un plus littéral. En cas de doute : mode composant pour les pièces, mode URL complète pour les ensembles.
Étape 3 : Lisez la sortie et surveillez les signes de pourcentage restants
La sortie apparaît dans le volet de droite. Pour le décodage, vérifiez si le résultat contient toujours %XX séquences - si c'est le cas, la valeur a été codée plus d'une fois Appuyez sur Swap pour déplacer cette sortie de nouveau dans l'entrée, décoder à nouveau et répéter jusqu'à ce que la chaîne cesse de changer Si l'entrée est mal formée (une égarement % Non suivi de deux chiffres hexadécimaux, comme un littéral 100%), vous obtiendrez une erreur explicite plutôt qu'un demi-décode silencieux, quel est le comportement que vous souhaitez lorsque vous déboguez.
Étape 4 : Copiez et vérifiez
Appuyez sur le bouton de copie et collez le résultat à sa place Pour tout ce qui est important - OAuth redirige en particulier - effectuez une dernière vérification de santé mentale : collez la valeur codée en mode décodage et confirmez-la en allers-retours exactement à ce que vous avez commencé. Trente secondes de vérification battent deux jours de redirect_uri_mismatch.
Pourcentage de codage, RFC 3986, et pourquoi les espaces deviennent soit 20 ou +
Les URL ne peuvent contenir en toute sécurité qu'un ensemble limité de caractères. Tout le reste doit être introduit en contrebande sous forme de pourcentage d'octets codés. Le livret de règles est RFC 3986 (2005), et il divise les personnages en deux camps.
Personnages non réservés N'ayez jamais besoin d'encodage : les lettres A–Z et a–z, chiffres 0–9et quatre symboles - trait d'union -, période ., souligner _, et Tilde ~. Les encoder est légal mais inutile.
Personnages réservés Ayez des travaux structurels dans une URL : : / ? # [ ] @ (les délimiteurs généraux) et ! $ & ' ( ) * + , ; = (les sous-délimiteurs). Le côlon sépare le schéma de l'hôte. Le point d'interrogation démarre la chaîne de requête. L'esperluette sépare les paramètres. Le fait qu'un caractère réservé ait besoin d'un encodage dépend entièrement de Où il apparaît. un / dans le chemin est la structure ; un / Dans une valeur de paramètre REDIRECT_URI, il y a des données, et il doit devenir %2F Ou le serveur analysera mal votre URL.
La mécanique : prenez le caractère, obtenez son ou ses octets UTF-8 et écrivez chaque octet comme % suivi de deux chiffres hexadécimaux. Les caractères ASCII sont d'un octet - l'espace est %20, l'esperluette est %26. Mais UTF-8 est un encodage multi-octets, donc é est de deux octets : %C3%A9. Un emoji typique est de quatre octets - 🚀 code comme %F0%9F%9A%80. C'est pourquoi les outils qui supposent qu'un caractère est égal à un octet corrompt tout ce qui est en dehors de l'anglais simple.
Maintenant, le problème d'espace - la chose la plus déroutante dans l'encodage d'URL. Selon la RFC 3986, un espace devient %20. Mais les soumissions de formulaires HTML utilisent une sérialisation différente, application/x-www-form-urlencoded, défini aujourd'hui dans le WhatWG URL standard, et celui Le format encode les espaces comme +. Les deux sont corrects - dans leurs propres contextes. Ce qui signifie + Dans une chaîne de requête est ambigu : il peut s'agir d'un signe plus littéral (lecture RFC 3986) ou d'un espace codé (lecture de code de forme). Si vous avez déjà vu un numéro de téléphone arriver comme 1234 5678 Quand quelqu'un a envoyé +1234..., vous avez rencontré ce bug. Mon conseil : toujours émettre %20 Pour les espaces et %2B Pour les signes plus littéraux. Personne ne les a mal analysés.
JavaScript vous donne trois fonctions, et elles ne sont pas interchangeables. Étant donné la chaîne a=b&c d:
const s = "a=b&c d";
encodeURIComponent(s); // "a%3Db%26c%20d" — encodes =, &, and space
encodeURI(s); // "a=b&c%20d" — leaves = and & alone
escape(s); // "a%3Db%26c%20d" — deprecated; breaks on Unicode
encodeURIComponent Encode tout sauf les caractères non réservés (plus !'()*- une bizarrerie héritée), la rendant sûre pour les valeurs des paramètres. encodeURI préserve les caractères réservés afin qu'une URL complète reste fonctionnelle - mais cela signifie également qu'elle ne sera pas protéger un & à l'intérieur de vos données. et escape() est obsolète pour une bonne raison : il produit des produits non standard %uXXXX Séquences pour les caractères non latins-1. Ne l'utilisez jamais dans un nouveau code.
PHP reflète la même répartition avec une torsion : urlencode() Produit un encodage de style forme (les espaces deviennent +), tandis que rawurlencode() Suit la RFC 3986 (les espaces deviennent %20). Si vous créez des URL pour autre chose qu'un corps de poste de formulaire, rawurlencode() est celui que vous voulez. J'ai expédié le code d'administration WP avec le mauvais dès le début ; WordPress's Own add_query_arg() m'a fait gagner plus de fois que je ne voudrais l'admettre.
Enfin, le piège à double encodage. %20 est un espace, codé. encoder cette chaîne encore et le % lui-même devient %25, vous donnant %2520. décodez-le une fois et vous obtenez %20 retour - toujours codé Cela se produit chaque fois que deux couches d'un système chaque " ; utilement" ; encoder : votre code plus un proxy, un service de redirection plus un lien-wrapper de messagerie La règle qui l'empêche : encoder exactement une fois, au dernier moment possible avant que la valeur n'entre dans l'URL, et ne jamais encoder quelque chose que vous avez fait' ; pas seulement décoder ou générer brut.
Cas d'utilisation courants
Créer des chaînes de requête avec une entrée utilisateur
Chaque fois que du texte dactylographié par l'utilisateur entre dans une URL - boîtes de recherche, filtres, valeurs de formulaire transmises via GET - il doit être codé par composant Un utilisateur recherchant Q&A tips se transforme ?q=Q%26A%20tips; non encodé, le serveur voit une recherche Q et un paramètre mystère A tips. Pendant le développement, j'utilise le Encodeur d'URL Pour générer des valeurs attendues avant d'écrire le code, j'ai donc une référence connue correcte à tester. C'est aussi le moyen le plus rapide de régler "ce caractère doit être encodé ?" Arguments dans la revue de code : collez-le en mode composant et regardez. Les API modernes comme JavaScript URLSearchParams gérez cela automatiquement et vous devriez les utiliser - mais vous devez quand même le faire vérifier Leur sortie lorsque quelque chose se casse, et c'est un travail de décodage.
Déboguer les liens UTM et campagne
Les liens marketing sont en train d'encoder les champs de mines. Les valeurs UTM avec des espaces, des tuyaux ou des ampersands ; les liens qui passent par un raccourcisseur d'URL, puis un service de messagerie et n°39 ; s un traceur de clic, puis une redirection - chaque couche une chance d'encodage pour être ajoutée ou mutilée Lorsqu'une campagne se révèle erronée en analyse, mon premier mouvement est toujours le même : coller le lien complet en mode decodage et lire ce que le serveur d'analyse a réellement reçu Neuf fois sur dix le coupable est visible en quelques secondes - un brut & fractionnement d'un paramètre, un + qui était censé être un plus littéral, ou un %2520 trahir le double encodage. mon black&friday L'incident aurait été une solution de onze secondes au lieu d'un trou de données de onze jours si je l'avais fait le premier jour.
OAuth redirect_uri et URL de rappel
OAuth est l'endroit où les erreurs d'encodage coûtent cher, car les fournisseurs Correspondance exacte des chaînes sur les URI de redirection Le redirect_uri est une URL complète intégrée en tant que valeur de paramètre dans une autre URL - il doit donc être codé par composant, exactement une fois. Sous-encodez-le et le ? ou & À l'intérieur, il casse l'URL d'autorisation externe. Double-encodez et le fournisseur compare https%3A%2F%2F... contre votre enregistré https://... et revient redirect_uri_mismatch Avec zéro détail supplémentaire. Lorsque cette erreur apparaît, décodez l'URL d'autorisation réelle à partir de la barre d'adresse de votre navigateur et comparez le caractère par caractère de redirect_uri avec la valeur enregistrée de votre application. associez-le à la Décodeur JWT Pour inspecter les jetons qui reviennent, et vous pouvez déboguer un flux OAuth entier sans quitter le navigateur.
Décodage des URL noueuses des journaux et des en-têtes de référent
Les journaux de serveurs et les en-têtes de référence sont remplis de soupes en pourcentage : %D0%9F%D1%80%D0%B8%D0%B2%D0%B5%D1%82 dans un référent de recherche, des chemins codés en triple à partir du trafic bot, des charges utiles codées dans des requêtes suspectes Le décodage de ceci est la façon dont vous découvrez ce qui s'est réellement passé - que ce bizarre 404 soit un utilisateur avec une requête cyrillique ou un script sondant pour ../../etc/passwd Derrière trois couches d'encodage. C'est aussi exactement la situation où l'angle de confidentialité est le plus important : les URL de journaux contiennent régulièrement des jetons de session et des adresses e-mail. Décodez-les dans un outil côté client, et non sur un serveur aléatoire qui conserve ses propres journaux. J'ai écrit plus sur ce flux de travail dans le Guide des outils de débogage de l'API.
Test d'API avec curl
Votre coque et votre boucle forment un deuxième champ de mines en plus de l'encodage d'URL. & Arrière-plan un processus en bash, ? déclenche l'expansion de glob dans zsh - donc une URL non citée et non codée échoue de manière confuse avant même d'atteindre le réseau Mon flux de travail : encoder chaque valeur de paramètre dans l'outil, assembler l'URL, l'envelopper dans des guillemets simples, puis exécuter curl Quand une API renvoie un 400 pour une requête qui " ; semble droite," ; Je décode l'URL exacte à partir de la sortie verbale (curl -v) pour voir ce qui a vraiment été envoyé - plus d'une fois le bug était mon terminal, pas mon API. curl' ;s --data-urlencode FLAG gère l'encodage pour les corps de poste, mais pour obtenir des chaînes de requête, vous êtes principalement seul, et un encodeur fiable vaut de deviner.
Partage de liens avec du texte non-ASCII
Articles Wikipédia dans d'autres langues, liens Google Maps avec des noms de lieux locaux, URL de documents avec des limaces bengali ou arabes - copiez-en une dans votre barre d'adresse et vous pourrez obtenir l'un ou l'autre des jolis Unicode forme ou un mur de %E0%A6%AC-octets de style, selon l'humeur du navigateur' ; s. Certaines applications de chat et clients de messagerie tronquent ou mutilent le formulaire Unicode brut Le codage de l'URL avant le partage produit une chaîne ASCII pure qui survit à chaque messager, liste de diffusion et moteur de rendu Markdown I' ; a essayé. En allant dans l'autre sens, le décodage transforme un lien partagé illisible en quelque chose qu'un humain peut vérifier avant de cliquer - vaut la peine de faire avant de transmettre tout ce qui est arrivé ressemblant à du bruit de ligne.
EncodeURIComponent vs EncodeURI vs Escape() : Lequel utiliser ?
Trois fonctions, une par défaut correcte. Voici la comparaison honnête :
encodeURIComponent() |
encodeURI() |
escape() |
|
|---|---|---|---|
| encoder | Tout sauf A-Z a-z 0-9 - . _ ~ ! ' ( ) * |
Tout sauf non réservé + tous les caractères réservés (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) |
Tout sauf A-Z a-z 0-9 @ * _ + - . / |
| L'espace devient | %20 |
%20 |
%20 |
& et = |
encodé (%26, %3D) |
Non encodé | encodé |
| Gestion des Unicodes | Corriger les octets UTF-8 | Corriger les octets UTF-8 | Cassé - non standard %uXXXX |
| utiliser pour | Valeurs de paramètres, segments de chemin, tout ce qui se trouve dans une URL | Une URL complète que vous ne souhaitez pas restructurer | nullité |
| situation | Standard, recommandé | Standard, niche | obsolète |
Ma position, et je mourrai sur cette colline : manier encodeURIComponent Pour les valeurs, presque toujours. Le modèle mental est simple - si la chaîne est en marche à l'intérieur Une URL (une valeur de requête, un segment de chemin, un redirection_URI), c'est un composant, et il obtient encodeURIComponent. les cas où encodeURI Il est vraiment rare de savoir que vous avez une URL complète, déjà structurée, contenant des espaces ou des caractères non ASCII, et vous souhaitez la désinfecter sans toucher sa structure. C'est peut-être 5 % des appels d'encodage dans le monde réel. et escape() ne devrait tout simplement jamais apparaître dans le code écrit après 2010 environ - sa sortie Unicode est & #39 ; t un codage en pourcentage valide, et chaque linter moderne l'indicateurera de toute façon.
Une autre nuance : encodeURIComponent feuilles ! ' ( ) * non encodées pour des raisons historiques, même si la RFC 3986 les répertorie comme sous-délimiteurs réservés Pour les API OAuth et à analyse stricte, certaines bibliothèques ajoutent également un deuxième passage pour encoder ces cinq. Si une API difficile rejette vos valeurs, ce' ; est un endroit à regarder - et le Encodeur d'URL Le mode composant vous indique exactement quels caractères ont été convertis afin que vous puissiez comparer.
Questions fréquentes
Qu'est-ce que l'encodage d'URL ?
Le codage d'URL (pourcent-encoding) est le mécanisme permettant de représenter des caractères dans une URL qui serait autrement dangereuse ou structurellement significative Chaque caractère problématique est converti en ses octets UTF-8, et chaque octet est écrit en signe pour cent suivi de deux chiffres hexadécimaux - un espace devient % 20, un esperluette devient % 26. les règles sont définies dans la RFC 3986. il existe parce que les URL n'autorisent qu'un jeu de caractères limité, et des caractères comme ? et & amp ; ont des tâches à effectuer à l'intérieur de la structure de l'URL.
Pourquoi les espaces se transforment-ils parfois en %20 et + d'autres fois ?
Deux spécifications différentes. La RFC 3986, qui régit les URL elles-mêmes, code un espace comme % 20. le format application/x-www-form-urlencoded utilisé par les soumissions de formulaires HTML, défini dans la norme URL WHATWG, code un espace comme +. Les deux sont valides dans leur propre contexte, c'est pourquoi + dans une chaîne de requête est ambigu La pratique sûre : toujours produire % 20 pour les espaces et % 2 B pour les signes littéraux plus - chaque analyseur les gère correctement.
Quelle est la différence entre EncodeURI et EncodeURIComponent ?
encodeURIComponent code presque tout, y compris /, ?, & amp ;, et =, ce qui le rend sûr pour les valeurs individuelles placées à l'intérieur d'une URL. encodeURI préserve ces caractères réservés afin qu'une URL complète conserve sa structure Utilisez encodeURIComponent pour les valeurs des paramètres et les segments de chemin - qui est presque tous les cas réels - et encodezURI uniquement lors de la désinfection d'une URL complète sans la restructurer. L'utilisation d'encodeURI sur une valeur contenant & amp ; brisera silencieusement votre chaîne de requête.
Comment réparer une URL à double encodage ?
Le double encodage se produit lorsqu'une chaîne déjà codée est à nouveau codée - % 20 devient % 2520 car le % lui-même se transforme en % 25 Pour la corriger, décodez la chaîne de manière répétée jusqu'à ce qu'il ne reste plus aucune séquence % XX et que la sortie cesse de changer Ensuite, trouvez quelle couche de votre système encodée deux fois - généralement votre code plus un proxy, un service de redirection ou un éditeur de liens par e-mail - et supprimez l'une des étapes de la règle : encoder exactement une fois, au dernier moment avant que la valeur n'entre dans l'URL.
Est-il sécuritaire de décoder les URL dans un outil en ligne ?
Uniquement si l'outil s'exécute côté client. Les URL contiennent fréquemment des codes OAuth, des jetons de réinitialisation de mot de passe, des identifiants de session et des adresses e-mail. Un outil côté serveur reçoit tout cela et peut le conserver indéfiniment dans les journaux d'accès. L'encodeur/décodeur d'URL Toolz.dev effectue toute la conversion dans votre navigateur avec JavaScript - aucune donnée n'est transmise nulle part, ce que vous pouvez vérifier dans votre navigateur & #39 ; l'onglet réseau Pour tout ce qui contient des informations d'identification ou des jetons, le traitement côté client doit être non négociable.
Dois-je encoder l'intégralité de l'URL ou simplement les paramètres ?
Juste les parties de données - valeurs de paramètres individuels et, occasionnellement, segments de chemin Les caractères structurels de l'URL elle-même (le ://après le schéma, le ? démarrage de la requête, le & amp ; entre les paramètres) doivent rester non codés ou l'URL cesse de fonctionner Encodez chaque valeur séparément avec un encodage de type composant, puis assemblez l'URL autour d'eux Le codage d'une URL complète de bout en bout n'est correct que lorsque cette URL devient elle-même une valeur à l'intérieur d'une autre URL, comme une redirection_uri OAuth.
L'encodage d'URL peut-il gérer les caractères emoji et non anglais ?
Oui - le pourcentage-encodage moderne fonctionne sur les octets UTF-8, donc tout caractère Unicode fonctionne Un caractère de deux octets comme é devient % C3 % A9, et un emoji de quatre octets devient quatre pour cent-séquences, comme % F0 % 9 F % 9 A % 80. les problèmes ne surviennent qu'avec les outils existants ou la fonction JavaScript' ; s'échappe () dépréciée, qui supposent des encodages sur un octet et produisent une sortie invalide Le codeur Toolz.dev gère correctement UTF-8 complet dans les deux sens.
Pourquoi mon URL se casse-t-il lorsqu'un paramètre contient un esperluette ?
Parce que & amp ; est le délimiteur entre les paramètres Si une valeur contient un ampersand brut - disons utm_campaign=black& ; vendredi - le serveur l'analyse comme un paramètre nommé utm_campaign avec valeur noire, plus un deuxième paramètre nommé vendredi Aucune erreur n'est soulevée ; vos données sont juste silencieusement fausses Encodez l'ampersand comme % 26 à l'intérieur de la valeur et le paramètre arrive intact C'est l'un des bogues d'URL les plus courants et les moins visibles.
Que signifie %2f dans une URL ?
% 2 F est la barre oblique codée en pourcentage. You' ; le verra lorsqu'une valeur qui se trouve contenir une barre oblique - un chemin de fichier, une date comme 07/07, ou une URL imbriquée - est correctement codée avant d'être placée dans un paramètre de requête ou un segment de chemin Sachez que certains serveurs et proxys (Apache, anciennes versions de Tomcat, diverses passerelles API) rejettent ou décodent silencieusement % 2 F dans le chemin pour des raisons de sécurité, donc si une requête avec une barre oblique codée renvoie un 404, la configuration côté serveur est généralement le coupable, pas votre encodage.
Comment puis-je encoder l'URL en python, php ou sur la ligne de commande ?
python : urllib.parse.quote() pour les segments de chemin et quote_plus() pour les valeurs de requête de style de formulaire. PHP : RawUrlencode() produit une sortie RFC 3986 avec %20 pour les espaces, tandis que urlencode() produit une sortie de style forme avec +. Ligne de commande : jq -rr @uri ou curl's --data-data-urlencode Flag. Chacun de ces éléments correspond au comportement de style composant de cet outil, afin que vous puissiez prototyper l'encodage ici et vérifier que votre code produit une sortie identique à l'octet.
arrivée
L'encodage d'URL est une petite compétence avec un gain surdimensionné. Une fois que vous pouvez lire %C3%A9 Comme un é et un spot %2520 comme une odeur à double encodage, toute une catégorie de " ; ça marche sur ma machine" ; les bugs - flux OAuth cassés, campagnes UTM fantômes, API rejetant des requêtes d'apparence parfaitement raisonnable - passent de mystérieux à mécaniques Les règles s'adaptent sur une carte d'index : les caractères non réservés passent, tout le reste devient des octets UTF-8 comme % HH, encodent des valeurs non structurées, et encodent exactement une fois.
Gardez le Encodeur/décodeur d'URL marqué à côté de ses frères et sœurs - le Convertisseur de base64 Pour l'autre schéma d'encodage que vous rencontrerez dans chaque en-tête d'authentification (j'ai écrit un Guide d'encodage Base64 Quand utiliser lequel), le Encodeur/décodeur d'entités HTML Pour la troisième couche d'encodage que le contenu Web aime empiler sur le dessus (le Guide d'entité HTML Couvre la version à double échappement du même piège avec lequel j'ai frappé %2520), et le Formateur JSON pour quel que soit l'URL décodée.
Et si vous assemblez un kit de débogage basé sur un navigateur plus large, le Guide des outils de codage marche à travers comment ces outils s'emboîtent dans un vrai workflow Tout sur Toolz.dev fonctionne côté client, ne coûte rien et fait bien un travail Ça' ; c'est tout le pitch - le même que j'aurais aimé que quelqu'un me fasse avant de passer deux jours sur un seul %25 égaré.



