asp.net - 分配 location.href 时,请说明 url 编码(在 asp.net 和 firefox 中)

标签 asp.net javascript url-encoding

在某些 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/

相关文章:

javascript - setTimeout 停止工作

java - 如何在每个字符串索引内连接字符串或单词

php - 如何在同一页面的标签页内跳转

jsf - JSF 请求参数映射的返回值中缺少字符 "+"

c# - 是否有 C# 的 HttpServerUtility.UrlTokenDecode 的 Java 等效项?

javascript - 我如何在 asp.net mvc 中隐藏 div

c# - 重复初始化 Clearscript V8 引擎时内存不足(GC 问题?)

javascript - <%= x.ClientID %> 在重复的用户控件中返回错误值

asp.net - 如何访问 .cshtml Razor 文件中的项目属性?

Javascript 与 MySQL 的 promise