对于querystring取值时候发生+号变空格的问题

今天遇到这个问题,在网上找了几个答案,解决了问题,很高兴,所以贴出来给大家分享一下:


URL如下

http://127.0.0.1/test/test.aspx?sql= and id='300+'

Request.QueryString["sql"]后取出的值为and id='300',

“+”就消失了,请问这是为什么?应该如何解决呢?
______________________________________________________________________________________________
答1:
你应该先对url编码
"test.aspx" + Server.UrlEncode(sql)
______________________________________________________________________________________________
答2:
Server.UrlEncode后,空格就会变为%20%了呢


现在手上的项目中使用了ClickOnce技术来部署客户端,客户端有时需要从服务器传一些参数,对于ClickOnce部署的程序来说我们可以在launch的URL中使用query strings来达到这一目的。参照MSDN上的文章,很快就写完了代码。好了,试试看。部署,从服务器launch客户端,似乎一切正常,所有参数的值都顺利得到了。

可还没等Check-in代码,一个测试就失败了。Debug了半天才发现原来是一个参数值中又加号:+。在使用HttpUtility.ParseQueryString分析query string后参数值中的加号变成了空格,以前似乎没遇到过这样的现象。Google了一下才知道原来加号在query string是保留用来代表空格的,要在query string中传这些保留字符必须对query string进行编码。

修改了服务端的代码,想当然的在客户端加了decode的方法,没想到结果还是不对。查了MSDN关于HttpUtility.ParseQueryString方法的帮助才知道原来这个方法内置会对query string进行解码(decode)并返回包含结果的NameValueCollection。

忙了半天最后终于搞定了。

总结一下:

1)安全起见query string一定要encode

2)HttpUtility.ParseQueryString会自动做decode,不要画蛇添足。

原文地址:https://www.cnblogs.com/a14907/p/5077355.html