Pourquoi le constructeur d'URL n'encode-t-il pas les crochets dans la chaîne de requête ?
P粉287254588
P粉287254588 2023-09-03 21:05:00
0
1
462
<p>En JavaScript, le constructeur <code>URL</code> n'encode pas les crochets et les parenthèses lorsqu'ils apparaissent dans une chaîne de requête, tandis que <code>encodeURI</code> code> les codera toujours. Cela me rend confus car la plupart des sources disent d'utiliser <code>encodeURI</code>/<code>encodeURIComponent</code> pour encoder lorsque vous incluez des caractères spéciaux dans les paramètres de requête. Je m'attendais à un comportement similaire pour l'objet <code>URL</code> </p> <p>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 codés. Existe-t-il une spécification qui l'indique, ou dois-je toujours encoder les paramètres avant d'utiliser le constructeur <code>URL</code> Merci pour votre aide. </p> <heure /> <p>Exemple illustrant un objet URL qui n'encode pas les crochets dans la chaîne de requête</p> <pre class="brush:js;toolbar:false;">const href = (new URL('https://foobar.com?myQuery={"@asdf/asdf":"1234"}' )).href; // ^ https://foobar.com/?myQuery={%22@asdf/asdf%22:%221234%22} ≪/pré> <p>Si j'utilise <code>encodeURI</code>, la seule différence est que les crochets sont codés</p> <pre class="brush:js;toolbar:false;">const href = encodeURI('https://foobar.com?myQuery={"@asdf/asdf":"1234"}'); // ^ https://foobar.com?myQuery=%7B%22@asdf/asdf%22:%221234%22%7D ≪/pré> <heure /> <p>Remarque : Si les parenthèses ne figurent pas dans les paramètres de requête, l'objet URL les encodera. </p> <pre class="brush:js;toolbar:false;">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} </pre></p>
P粉287254588
P粉287254588

répondre à tous(1)
P粉785957729

Il existe plusieurs encodages possibles, ils doivent tous être interprétés comme la même URL, donc aucun n'est techniquement faux. Un autre exemple est que le codage en pourcentage peut utiliser des caractères majuscules ou minuscules (%aa%AA),域名不区分大小写,空格可以被编码为+%20 (dans certaines parties).

Si vous souhaitez tester unitairement une implémentation spécifique de l'encodage d'URL, vous pouvez effectuer une correspondance de chaîne, mais si vous voulez savoir si deux URL sont identiques quelle que soit la façon dont elles sont encodées, vous devez d'abord effectuer une étape appelée "canonisation". , puis comparez.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal