我真的很困惑,当它被设置为查询字符串中的值时,我应该多少次编码一个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
也正确解码。
我的问题:
我应该将URL编码为值吗?如果我对其进行编码然后浏览器再次对其进行编码会是多余的吗?
或者我应该让浏览器为我编码吗?如果我让浏览器,接收页面是否会将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-as-a-value)具有相同的数据名{J} {}。接收方如何处理这个问题?还是HTTP服务器?
提前致谢!
答案 0 :(得分:2)
您应该使用encodeURIComponent
(一次),因为您正在编码url参数。
正如您在问题末尾所指出的那样,如果您的网址包含encodeURIComponent
,则无法使用&
对网址进行编码会有问题。
请注意,您的方法A仅有效,因为您的示例prevUrl
有点简单,例如它不包含第二个url参数。