Javascript URL-as-a-value-in-a-querystring应该编码多少次?

Javascript URL-as-a-value-in-a-querystring应该编码多少次?,javascript,urlencode,httpserver,Javascript,Urlencode,Httpserver,我真的很困惑,当URL在querystring中设置为值时,我应该编码多少次,因为我们知道浏览器有自己的编码过程。以下是场景: 我想重定向到另一个我想传递上一个URL的位置: 注意:当前URL为http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE 方法A(不带encodeURIComponent()): 我在地址栏里找到这个 http://localhost:8081/CostMonitoring/CostEstima

我真的很困惑,当URL在querystring中设置为值时,我应该编码多少次,因为我们知道浏览器有自己的编码过程。以下是场景:

  • 我想重定向到另一个我想传递上一个URL的位置: 注意:当前URL为
    http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE
方法A(不带
encodeURIComponent()
):

我在地址栏里找到这个

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()
):

使用此方法,我可以在地址栏中看到:

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服务器


    提前谢谢

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

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


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

    我认为您是对的,当我粘贴
    http://localhost:8081/CostMonitoring/Default.aspx?SameName=FromOrigURL&PrevURL=http://localhost:8081/CostMonitoring/Default.aspx?SameName=FromValueURL&PrevURL=http://localhost:8081/
    在我的地址栏中,并在接收页面中打印
    SameName
    PrevURL
    的值,它为
    SameName
    http://localhost:8081/CostMonitoring/Default.aspx?SameName=FromValueURL,http://localhost:8081/
    对于
    PrevURL
    ,考虑了两个
    PrevURL
    http://localhost:8081/CostMonitoring/CostEstimateApproval.aspx?CEMID=40&ToStatus=1CE&PrevURL=http%3A%2F%2Flocalhost%3A8081%2FCostMonitoring%2FMainMenu.aspx%3FOption%3DAllCE
    
    http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE