Warum kodiert der URL-Konstruktor keine Klammern in der Abfragezeichenfolge?
P粉287254588
P粉287254588 2023-09-03 21:05:00
0
1
410
<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粉287254588
P粉287254588

Antworte allen(1)
P粉785957729

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

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

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!