Maison  >  Questions et réponses  >  le corps du texte

Pourquoi le constructeur d'URL n'encode-t-il pas les crochets dans la chaîne de requête ?

<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粉287254588P粉287254588412 Il y a quelques jours422

répondre à tous(1)je répondrai

  • P粉785957729

    P粉7859577292023-09-04 10:55:36

    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.

    répondre
    0
  • Annulerrépondre