Javascript URL-as-a-value-in-a-querystring应该编码多少次?
我真的很困惑,当URL在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的位置:
注意:当前URL为
http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE
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
也被正确解码了
我的问题是:
http://www.domain.com/newpage.aspx?SameName=DifferentValue&PrevURL=http://www.domain.com/oldpage.aspx?SameName=DifferentValue&PrevURL=http://www.domain.com/anypage.aspx
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