2 votes

Pourquoi l'encodeur d'URL ne code-t-il pas les crochets dans les chaînes de requête ?

En JavaScript, le constructeur URL n'encode pas les crochets et les parenthèses lorsqu'ils se trouvent dans une chaîne de requête, tandis que encodeURI ou encodeURIComponent les encode toujours. Cela me perturbe car la plupart des sources conseillent d'encoder vos paramètres de requête quand ils contiennent des caractères spéciaux en utilisant encodeURI/encodeURIComponent. Je m'attendrais à ce que l'objet URL ait un comportement similaire.

Cela me pose des problèmes pour écrire des tests unitaires car je ne sais pas comment les paramètres de requête de l'objet URL seront encodés. Existe-t-il une spécification pour cela ou dois-je toujours simplement encoder mes paramètres avant d'utiliser le constructeur URL? Merci pour votre aide.


exemple montrant que l'objet URL n'encode pas les crochets dans la chaîne de requête

const href = (new URL('https://foobar.com?myQuery={"@asdf/asdf":"1234"}')).href;
//     ^ https://foobar.com/?myQuery={%22@asdf/asdf%22:%221234%22}

si j'utilise encodeURI, la seule différence est que les crochets sont encodés

const href = encodeURI('https://foobar.com?myQuery={"@asdf/asdf":"1234"}');
//     ^ https://foobar.com?myQuery=%7B%22@asdf/asdf%22:%221234%22%7D

REMARQUE : L'objet URL encodera bien les crochets s'ils ne se trouvent pas dans un paramètre de requête.

const href = (new URL('https://foobar.com/}}}?myQuery={"@asdf/asdf":"1234"}')).href;
//     ^ https://foobar.com/%7D%7D%7D?myQuery={%22@asdf/asdf%22:%221234%22}

1voto

Evert Points 17625

Il existe plusieurs encodages possibles qui devraient tous être interprétés comme la même URL, donc techniquement aucun n'est incorrect. Un autre exemple est que l'encodage en pourcentage peut être effectué avec des caractères en majuscules ou en minuscules (%aa ou %AA), et le domaine n'est pas sensible à la casse et les espaces peuvent être encodés (dans certaines parties) comme soit + ou %20.

Si vous voulez tester unitairement une implémentation spécifique de l'encodeur d'URL, vous pouvez faire correspondre des chaînes, mais si vous voulez savoir si 2 URLs sont identiques peu importe comment elles ont été encodées, vous devez d'abord passer par une étape appelée 'normalisation' avant de les comparer.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X