应该在一个URL中作为一个值来编码多少次?

时间:2011-07-30 02:21:19

标签: javascript urlencode httpserver

我真的很困惑,当它被设置为查询字符串中的值时,我应该多少次编码一个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

  3. 如您所见,未编码的URL(实际URL和URL-as-a-value)具有相同的数据名{J} {}。接收方如何处理这个问题?还是HTTP服务器?

    提前致谢!

1 个答案:

答案 0 :(得分:2)

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

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

请注意,您的方法A仅有效,因为您的示例prevUrl有点简单,例如它不包含第二个url参数。

相关问题