【工作笔记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函数向后台提交请求,示例代码如下:
前端重要代码:
提示:上述url中act=test表示该行为是验证用户名,encodeURL函数是将username字符串作为 URI 进行编码,此函数是必需的。
后台重要代码:
提示:
上述代码目的是将获取到的请求原始数据重新编码,以方便获取到 中文 参数。
最后queryString 中获取到的字符串是 act=test&username=这是用户名,至于提取出username=后面的字符串就可以直接用: string note = queryString.Substring(queryString.IndexOf("username=") + 9);此时note为"这是用户名"。
上述代码使用前需要先引用一下两个类库:
最后,希望看到这篇文章的你能够成功解决遇到的问题,博主也是最近刚遇到这个问题,所以就写了这篇博文以记录一下。上述代码均为自己编写,可直接复制到程序使用,欢迎交流!
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>
最后,希望看到这篇文章的你能够成功解决遇到的问题,博主也是最近刚遇到这个问题,所以就写了这篇博文以记录一下。上述代码均为自己编写,可直接复制到程序使用,欢迎交流!
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 解决Ajax悬停效果,无法遮蔽FLASH的问题
- 星外ASP.Net的安全设置相关说明
- 再谈Jquery Ajax方法传递到action(补充)
- Dom在ajax技术中的作用说明
- Orace查询数据出现乱码的问题解决思路
- oracle em 按钮乱码解决办法及em网页变成英文
- C#、ASP.NET通用扩展工具类之TypeParse
- C#读取中文文件出现乱码的解决方法
- 使用Ajax实时检测"用户名、邮箱等"是否已经存在
- 探讨Ajax中同步与异步之间的区别
- mysql命令提示行连接乱码的解决
- C#、ASP.NET通用扩展工具类之LogicSugar
- C#、ASP.NET通用工具类IsWhat?(可以判断数字、身份证、数据类型等等)
- 原生AJAX写法实例分析
- 探秘ajax跨域请求
- Ajax中浏览器和服务器交互详解
- ajax实现点击不同的链接让返回的内容显示在特定div里
- ajax 动态传递jsp等页面使用id辨识传递对象
- 程序中常用的种代码