2011-07-28 167 views
39

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

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

请指教。

谢谢。

编辑:添加的代码用urlencode

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

您是否有密码? – tutts

+0

其实值取决于用户输入。 – domlao

+0

仅供参考'UrlBuilder',这似乎有点无用,这是我怎么偶然发现你的问题。看到http://stackoverflow.com/questions/24576239/why-doesnt-uribuilder-query-escaping-url-encoding-the-query-string – KCD

回答

81

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

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

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

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

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

在上面的例子之间的差别,谷歌的服务器脚本是用它们做搜索URL解码查询参数,然后。

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

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

希望这是URL编码清晰。

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

请参阅Encode URL in JavaScript?了解如何使用JavaScript对参数进行URL编码。从讨论中有简短的回答:

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

如何在JavaScript中将+符号替换为%2B。因为我在javascript中创建我的查询字符串。 – domlao

+1

krakat,请参阅http://stackoverflow.com/q/332872/303363 –

4

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

+0

像这样,string str = Server.UrlEncode( Requery.QueryString [ “新”]); ? THanks – domlao

+0

不完全是,您需要在将它们放入查询字符串之前对它们进行编码,而不是在将它们取出时。你如何设置查询字符串中的值?使用Javascript中的 – DoctorMick

+0

,像$(“#btn”)。click(function(){var param =“C++”; ...}); – domlao

0

我改变了我以前的陈述,所以没有人会感到困惑!

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

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

如果是网址,则应该使用URL编码,**不可以** Html编码。他们是不同的。 –

+0

我在javascript中添加了我的querystring,是否有任何可能的方式来编码它的JavaScript? – domlao

+0

你是对的!抱歉有任何不便! – gred

-1

的解决方案是始终包括.Replace(”“ ,“+”)当您请求查询字符串

string s = Request.QueryString [“id”]。Trim()。Replace(“”,“+”);

来源:http://www.webmasterworld.com/forum47/3238.htm

-1

试试这个,它为我工作:

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

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

-1

在解密Funcation加入这一行:

strText = strText.Replace(" ", "+"); 
+1

其他保留字符呢?这个解决方案只会解决+,而不是?等等 –

0

在发送给你之​​前ameter,你需要检查参数包含加号,如果有需要更换一个标志,例如: 的参数:klasjdlkasd + djid3223 可以更换:klasjdlkasdFLAGdjid3223

,当你去转换,你需要替换angain

klasjdlkasd + djid3223