在某些 javascript 中,我有:
var url = "find.aspx?" + "location=" + encodeURIComponent( address );
alert( url );
location.href = url;
其中 address 的值为字符串“Seattle, WA”。
在我看到的警报中
find.aspx?Seattle%2C%20WA
如我所料。
但是在服务器端,当我查看 Request.Url 时,我看到的相关子字符串是
find.aspx?Seattle, WA
在 Firefox url 窗口中我看到了
find.aspx?location=Seattle%2C WA
所以我得到三种不同的表示,而我希望在所有三个地方我都应该看到我在警报中看到的内容。我的期望是我分配给 location.href 的 url 应该按原样显示在浏览器 url 窗口中,并且应该按原样传递给 Request.Url 中的服务器(我需要解码服务器上的值在使用它们之前)。发生了什么事?
最佳答案
Firefox 将某些编码字符转换为文字形式,以对用户友好。它还会将输入地址栏的空格转换为服务器的 %20。
更新:Firefox 不显示未编码的逗号的原因是因为 URL 中允许使用逗号,但不允许使用空格,因此它知道有空格要明确解释,而预编码逗号不同于某些服务器的非编码逗号。参见:Can I use commas in a URL?
ASP 可能试图通过为您自动取消编码字符串来帮助您解决问题。
更新:看起来 ASP.NET 默认为您取消编码 Request.Url,如此处所述:QueryString malformed after URLDecode他们还提到您可以使用 HttpRequest.Url.Query
访问未解码的版本。
警报是唯一不会对您产生任何“魔力”的东西。
关于asp.net - 分配 location.href 时,请说明 url 编码(在 asp.net 和 firefox 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2115796/