加号查询字符串


80

我有一个使用C#和asp.net创建的webapp。我将参数值放在带有加号(+)的查询字符串中。但是加号消失了。

如何在查询字符串中包含加号(+)而不会消失?

请指教。

谢谢。

编辑:使用UrlEncode添加代码

string str = Server.UrlEncode(Requery.QueryString["new"]);

实际上,该值取决于用户输入。
domlao 2011年

仅供参考,请注意UrlBuilder,这似乎毫无用处,这是我偶然发现您的问题的方式。参见stackoverflow.com/questions/24576239/…–
KCD

*UriBuilder不网址
KCD

Answers:


137

+符号在查询字符串中具有语义。它用来表示一个空间。在查询字符串中具有语义重要性的另一个字符&是用于分隔var=value查询字符串中的各个对。

大多数服务器端脚本会在使用查询参数之前对其进行解码,以便将a+正确转换为空格。现在,如果希望+在查询字符串中出现文字,则需要指定%2B

+ 登录查询字符串中的URL解码为空格。 %2B查询字符串中的URL解码为+号。

看到之间的区别

http://www.google.com/search?q=foo+bar

http://www.google.com/search?q=foo%2Bbar

在上述示例中,Google的服务器脚本对查询参数进行URL解码,然后使用它们进行搜索。

URL编码不过是%符号,后跟特殊字符的十六进制代码。例如,我们知道的十六进制代码A为0x41(十进制:65)。试试这个:

http://www.google.com/search?q=%41

希望这可以使URL编码清晰明了。

因此,如果您希望在+JavaScript提取带有+查询参数的URL时保留该符号,并且服务器端脚本将在对URL进行解码后处理查询参数,则应在URL中对查询参数进行URL编码在使用发出HTTP get请求之前,以便当请求到达服务器端脚本时所有+符号都转换为%2B。现在,当服务器端脚本对查询字符串进行URL解码时,所有都%2B将转换回+您想要的符号。

看到用JavaScript编码URL吗?了解如何使用JavaScript对参数进行URL编码。那里的讨论的简短答案:

var encodedURL = "http://example.com/foo.php?var=" + encodeURIComponent(param);

1
如何在JavaScript中将+符号替换为%2B。因为我正在用JavaScript创建查询字符串。
domlao 2011年

5

您应该对查询字符串值进行URLEncode,以确保不会丢失任何特殊字符。


1
像这样,字符串str = Server.UrlEncode(Requery.QueryString [“ new”]); ?感谢
domlao

不完全是,您需要先对它们进行编码,然后再将它们放入查询字符串中,而不是在将它们取出时再进行编码。如何设置查询字符串中的值?
DoctorMick

在Javascript中,例如$(“#btn”)。click(function(){var param =“ c ++”; ...});
domlao 2011年


1

我更改了之前的声明,所以没有人感到困惑!

使用Server.UrlEncode创建您的URL。例如

string myUrl = "http://myurl?param1="  + Server.UrlEncode("my+param+1");

3
如果用于URL,则应使用URL编码,而不是Html编码。他们不同的。
Damien_The_Unbeliever

我在javascript中添加了我的querystring,有没有可能在javascript中对其进行编码?
domlao 2011年

0

其他简单的方法是,Request.Url.ToString().Substring(Request.Url.ToString().IndexOf("=") + 1)假设我的网址是http://localhost/MyApp/Activate.aspx?ActivationCode=cHbtqH9P2dDZkx/mYUgFFo7nrNqSFgqdPisAzzu5/nwlEYDOHI+CQw==


0

在向您发送参数之前,您需要检查参数是否包含加号,是否需要替换为一个标志,例如:参数为:klasjdlkasd + djid3223您可以替换为:klasjdlkasdFLAGdjid3223

当您进行转换时,您需要重新更换

klasjdlkasd + djid3223


-1

试试这个,对我有用:

Request.QueryString["new"].Trim();


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.