zoukankan      html  css  js  c++  java
  • 对于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,不要画蛇添足。

  • 相关阅读:
    js实现继承的5种方式
    JavaScript文件操作(1)-基础
    12 个免费在线的 Web 网站性能测试工具
    server r2 系统更新文件清理
    在C#中,Json的序列化和反序列化的几种方式总结
    ES6,新增数据结构Set的用法
    ES6中有关数组的一些新操作
    vue中mode hash 和 history的区别
    POST和GET的区别
    前端的细节
  • 原文地址:https://www.cnblogs.com/a14907/p/5077355.html
Copyright © 2011-2022 走看看