suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Warum kodiert der URL-Konstruktor keine Klammern in der Abfragezeichenfolge?

<p>In JavaScript kodiert der <code>URL</code> Klammern und Klammern nicht, wenn sie in einer Abfragezeichenfolge erscheinen, während <code>encodeURI</code> oder <code>encodeURIComponent</ code> wird sie immer kodieren. Das verwirrt mich, weil die meisten Quellen sagen, dass man <code>encodeURI</code>/<code>encodeURIComponent</code> zum Codieren verwenden soll, wenn man Sonderzeichen in Abfrageparameter einfügt. Ich habe ein ähnliches Verhalten für das Objekt <code>URL</code> erwartet. </p> <p>Dadurch habe ich Probleme beim Schreiben von Unit-Tests, da ich nicht weiß, wie die Abfrageparameter des URL-Objekts codiert werden. Gibt es eine Spezifikation, die dies besagt, oder sollte ich Parameter immer codieren, bevor ich den <code>URL</code>-Konstruktor verwende? Ich danke Ihnen für Ihre Hilfe. </p> <hr /> <p>Beispiel, das zeigt, dass ein URL-Objekt Klammern in der Abfragezeichenfolge nicht kodiert</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} </pre> <p>Wenn ich <code>encodeURI</code> verwende, besteht der einzige Unterschied darin, dass die Klammern codiert sind</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 </pre> <hr /> <p>Hinweis: Wenn die Klammern nicht in den Abfrageparametern enthalten sind, werden sie vom URL-Objekt codiert. </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粉287254588455 Tage vor468

Antworte allen(1)Ich werde antworten

  • P粉785957729

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

    有多种可能的编码方式,它们都应该被解释为相同的URL,因此从技术上讲都不是错误的。另一个例子是百分比编码可以使用大写或小写字符(%aa%AA),域名不区分大小写,空格可以被编码为+%20(在某些部分)。

    如果您想对特定的URL编码实现进行单元测试,可以进行字符串匹配,但如果您想知道两个URL是否相同,无论它们是如何编码的,您首先需要进行一步称为“规范化”的操作,然后再进行比较。

    Antwort
    0
  • StornierenAntwort