【工作笔记0010】asp.net后台Request.QueryString获取的url中文参数乱码解决方案

16 篇文章 0 订阅
9 篇文章 0 订阅

通常页面前端向后台传递参数有两种方法:

1.表单提交。

采用form标签,将需要提交的内容放到form标签里面,

后台用string str = Request.Form["标签名字"].ToString();接收即可。

采用这种方式获取到的含有中文的字符串一般不会出现乱码的情况,

只需要页面中设置的字符编码和后台配置文件中设置的字符编码一致即可。

2.以url形式get或post请求。

这种情况多是用在只需要提交少量数据到后台验证或请求数据,但只要url中参数带有中文,就很可能会出现后台以Request.QueryString["参数名"].ToString();形式获取的中文乱码究其原因就是该url传到后台之前会重新编码,若传到后台后没有按照原来页面设置的编码格式解码回来的话就会出现获取到的中文参数乱码

下面给出一个例子来解决这种情况。

例如提交 用户名 到后台验证该用户名是否存在,这时可以利用jQuery的ajax函数向后台提交请求,示例代码如下:

前端重要代码:

$.ajax({
            type: 'post',
            dataType: 'text',
            url: "/xxxx.aspx?act=test&username=" + encodeURI('这是用户名'),
            success: function(data) {
                if(data == 'y')
                    alert("验证成功!");
                else
                    alert("验证失败!");
            },
            error: function() {
                alert("验证失败!");
            }
        });  </span></span>

提示:上述url中act=test表示该行为是验证用户名,encodeURL函数是将username字符串作为 URI 进行编码,此函数是必需的。

后台重要代码:

Type type = Request.GetType();
PropertyInfo property = type.GetProperty("QueryStringBytes",
BindingFlags.Instance | BindingFlags.IgnoreCase | BindingFlags.NonPublic);
byte[] queryBytes = (byte[])property.GetValue(Request, null);
string queryString = HttpUtility.UrlDecode(queryBytes, Encoding.UTF8);//获取中文参数采用UTF8编码就可以了

提示:

上述代码目的是将获取到的请求原始数据重新编码,以方便获取到 中文 参数。

最后queryString 中获取到的字符串是 act=test&username=这是用户名,至于提取出username=后面的字符串就可以直接用: string note = queryString.Substring(queryString.IndexOf("username=") + 9);此时note为"这是用户名"。


上述代码使用前需要先引用一下两个类库:

using System.Text;
using System.Reflection;</span></span>

最后,希望看到这篇文章的你能够成功解决遇到的问题,博主也是最近刚遇到这个问题,所以就写了这篇博文以记录一下。上述代码均为自己编写,可直接复制到程序使用,欢迎交流!


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值