gpt4 book ai didi

javascript - URL 作为查询字符串中的值应该编码多少次?

转载 作者:行者123 更新时间:2023-12-02 20:11:41 25 4
gpt4 key购买 nike

当 URL 设置为查询字符串中的值时,我真的很困惑应该对 URL 进行多少次编码,因为我们知道浏览器有自己的编码过程。场景如下:

  • 我想重定向到另一个位置,我想传递之前的 URL:注意:当前 URL 为 http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE

方法 A(不带 encodeURIComponent()):

window.location = 'CostEstimateApproval.aspx?CEMID=40' + 
'&ToStatus=1CE'+
'&PrevURL=' + window.location;

我在地址栏中看到这个

http://localhost:8081/CostMonitoring/CostEstimateApproval.aspx?CEMID=40&ToStatus=1CE&PrevURL=http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE

没有 encodeURIComponent(),一切正常,接收页面中 Request.Querystring("PrevURL") 的值为

http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE 

这是正确的。

方法 B(使用 encodeURIComponent()):

window.location = 'CostEstimateApproval.aspx?CEMID=40' + 
'&ToStatus=1CE'+
'&PrevURL=' + encodeURIComponent(window.location);

通过这种方法,我在地址栏中得到了这个:

http://localhost:8081/CostMonitoring/CostEstimateApproval.aspx?CEMID=40&ToStatus=1CE&PrevURL=http%3A%2F%2Flocalhost%3A8081%2FCostMonitoring%2FMainMenu.aspx%3FOption%3DAllCE

接收页面中Request.Querystring("PrevURL")的值为

http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE 

它也被正确解码。

我的问题:

  1. 我应该将 URL 编码为值吗?如果我编码然后浏览器再编码会不会多余?

  2. 或者我应该让浏览器为我编码?如果我让浏览器接收,接收页面是否会将 URL-as-a-value 的值与真实的 URL 值混淆?请考虑这个例子:

    http://www.domain.com/newpage.aspx?SameName=DifferentValue&PrevURL=http://www.domain.com/oldpage.aspx?SameName=DifferentValue&PrevURL=http://www.domain。 com/anypage.aspx

如您所见,未编码时的两个 URL(真实 URL 和 URL 作为值)具有相同的数据名称,即 SameName。接收方如何处理?还是 HTTP 服务器?

提前致谢!

最佳答案

您应该使用 encodeURIComponent(一次),因为您正在对 url 参数进行编码。

正如您在问题末尾所指出的,例如,如果您的网址包含 &,则无法使用 encodeURIComponent 对网址进行编码将会出现问题。

请注意,您的方法 A 之所以有效,是因为您的示例 prevUrl 的构成有些简单,例如它不包含第二个 url 参数。

关于javascript - URL 作为查询字符串中的值应该编码多少次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6880693/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com