您的位置:首页 > 编程语言 > ASP

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

2015-08-20 11:20 1391 查看
通常页面前端向后台传递参数有两种方法:

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>

最后,希望看到这篇文章的你能够成功解决遇到的问题,博主也是最近刚遇到这个问题,所以就写了这篇博文以记录一下。上述代码均为自己编写,可直接复制到程序使用,欢迎交流!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息