我真的很困惑当 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
这也被正确解码。
我的问题:
我应该将 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)在未编码时具有相同的数据名称,即SameName
. 接收方如何处理这个问题?还是 HTTP 服务器?
提前致谢!