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}