[转]asp.net URL中包含中文参数造成乱码的解决方法
本文转自:http://www.jb51.net/article/22437.htm
问题:
前段时间,在系统中做了一个类似于友情链接的功能块,一直运行良好,直到有一天加了类似于以下的链接地址:http://www.****.com/user.aspx?id=水天,就出现大问题了:
1、从IE地址栏中直接输入这个地址,访问没错; 2、做一个静态页,其中包括这个超链接,点击访问也没错;
3、就是把这个链接添加到这个功能块中,点击访问那边接收到的是乱码。
一开始,被这个问题也搞得头大,在google了一把后,总算是把问题给搞清楚了,其实只要这个链接地址不经过任何编码传递是不会有问题的。但就是加到了这个功能块后,再点击,虽然这个时候在IE地址栏里显示的还是"http://www.****.com/user.aspx?id=水天",但真正传递过去的参数"水天"其实已经经过类似于Server.UrlEncode的操作了,当然默认是utf-8编码,正是由于这个原因,如果对方系统不进行相应的解码,直接操作该参数,就产生了以上的错误。
解决方法: 网上有很多解决之道,最常见的莫过于以下几点: 1、在web.config里配制<globalization requestEncoding="gb2312" responseEncoding="gb2312" />,这个方法确实可行,但我想很多人不想用这种方法来解决,把整个项目的请求和回应都定为gb2312,我觉得不是一个好办法,有点本末倒置了,毕竟这会导致很多其它问题的出现。
2、把要包含该链接的aspx文档,修改其charset属性为gb2312。这个方法到也可以接受,不过对于该文中的问题还不是最好的方法,因为该功能块是可以动态添加到任何页面的,难道要去修改所有的页面?想想还是不太合适。
3、直接用Server.UrlEncode和Server.Decode进行加码和解码操作,这种方法对于发送方和接收方都在一个项目中是可行的,现在的问题是,我们要随意去访问别人的系统,所以只能弃用此方法了。
4、采用HttpUtility.UrlEncode(query, System.Text.Encoding.GetEncoding("GB2312"));对链接中的参数值进行gb2312的编码,这种方法,对方不用进行任何解码操作,直接接收参数则不会出现乱码。
一般提到最多的也就上面4种方法,其它的也跟这些大同小异。仔细分析后,觉得还是第4种方法最适合解决当前问题,把中文参数进行如4中的操作。但又出现另外一个问题,由于这是一个用户可以自由输入链接地址的功能,所以首先要做的就是得先分析这些链接URL,解析出参数,再对这些参数进行4中操作,然后再合拼成原来的URL地址。
幸亏,URL参数解析C#已经有类库的支持,不用再去写那些复杂的正则表达式来匹配了。这里我也不详细说了,直接贴出原码:
public static string InitChineseUrl(string chineseUrl)
{
Uri url = new Uri(chineseUrl);
System.Collections.Specialized.NameValueCollection nv = System.Web.HttpUtility.ParseQueryString(url.Query, System.Text.Encoding.GetEncoding("utf-8"));
string query = "";
for (int i = ; i < nv.Count; i++)
{
if (query.Trim() == string.Empty)
{
query = "?" + nv.Keys[i] + "=" + HttpUtility.UrlEncode(nv[i], System.Text.Encoding.GetEncoding("GB2312"));
}
else
{
query += "&" + nv.Keys[i] + "=" + HttpUtility.UrlEncode(nv[i], System.Text.Encoding.GetEncoding("GB2312"));
}
}
string u = chineseUrl.Split('?')[] + query;
return u;
}
这里我是把所有的参数都进行gb2312编码操作了,反正参数如果是英文或者是数字,经过这些操作后还是不变的。
[转]asp.net URL中包含中文参数造成乱码的解决方法的更多相关文章
- JS获取URL传的值与解决获取URL中的中文参数出现乱码
大家好,我是小C, 我们在项目开发中有时需要页面与页面之间的传值,那我们可能会选择用地址栏传递参数,那另外的那个页面就需要获取地址栏里的参数,今天分享下关于地址栏怎么传递参数与获取中文参数出现乱码的解 ...
- js获取url中的中文参数出现乱码
解决方法 function getQueryString(key){ var reg = new RegExp("(^|&)"+key+"=([^&]*) ...
- get请求url中带有中文参数出现乱码情况
在项目中经常会遇到中文传参数,在后台接收到乱码问题.那么在遇到这种情况下我们应该怎么进行处理让我们传到后台接收到的参数不是乱码是我们想要接收的到的,下面就是我的一些认识和理解. get请求url中带有 ...
- js的url中传递中文参数乱码,如何获取url中参数问题
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript ...
- Js的Url中传递中文参数乱码的解决
一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: 2. 接收参数页面:test02.html 二:如何获取Url& ...
- ASP.NET MVC中对Model进行分步验证的解决方法
原文:ASP.NET MVC中对Model进行分步验证的解决方法 在我之前的文章:ASP.NET MVC2.0结合WF4.0实现用户多步注册流程中将一个用户的注册分成了四步,而这四个步骤都是在完善一个 ...
- Python3:读取配置dbconfig.ini(含有中文)显示乱码的解决方法
Python3:读取配置dbconfig.ini(含有中文)显示乱码的解决方法 一.原因 Python 3 中虽有encoding 参数,但是对于有BOM(如Windows下用记事本指定为utf-8) ...
- url中拼接中文参数,后台接收为乱码的问题
遇到在URL中拼接中文的参数,后台拿到的数据为乱码的问题,这里来说一下问题出现的原因与解决方法. 大家比较关心的应该是解决的方法,因此先说解决方法. 解决方法 解决的方法是在客户端对这个中文参数进行编 ...
- Extjs4.2 ajax请求url中传中文參数乱码问题
今天有个需求须要在url中传入中文參数.结果在后台取得时出现乱码,怀疑可能是编码问题.上网查询了资料,试了几种办法.发现有一种可行,记录在此,以便查阅. url中用encodeURI 进行2次编码: ...
随机推荐
- C/C++中有关字长与平台无关的整数类型
在C/C++中,整型的长度跟编译器相关,编译器的实现取决于CPU. 比如TC++是DOS16下的应用程序,DOS16是16位的操作系统,所以TC++中sizeof(int)==16:同理win32中s ...
- 2015年第六届蓝桥杯省赛试题(JavaA组)
1.结果填空 (满分3分)2.结果填空 (满分5分)3.结果填空 (满分9分)4.代码填空 (满分11分)5.代码填空 (满分13分)6.结果填空 (满分17分)7.结果填空 (满分21分)8.程序设 ...
- Oracle数据库网闸配置注意事项
1.数据库用户需要的权限 grant select any dictionary to coss; grant alter any procedure to coss; grant create tr ...
- unity编辑器拓展
[ExecutelnEditMode] 在EditMode下也可以执行脚本,Unity默认情况下,脚本只有运行时被执行,加上此属性后,不运行程序也能执行.与PlayMode不同的是函数不会不停 ...
- Educational Codeforces Round 60 (Rated for Div. 2)D(思维,DP,快速幂)
#include <bits/stdc++.h>using namespace std;const long long mod = 1e9+7;unordered_map<long ...
- Python列表知识补充
1.import this Python之禅,圣经. >>> import this The Zen of Python, by Tim Peters Beautiful is b ...
- kuangbin专题十六 KMP&&扩展KMP HDU3613 Best Reward(前缀和+manacher or ekmp)
After an uphill battle, General Li won a great victory. Now the head of state decide to reward him w ...
- swift -- 单例+ lazy懒加载 + 第三方库
//工具类单例 static let goods : NHGoods = { let good = NHGoods() return good }() //懒加载 lazy var registerB ...
- angularJs基础学习
实例化一个angularJs模块 <body class="hold-transition skin-red sidebar-mini" ng-app="app&q ...
- zookeeper客户端使用原生JavaApi操作节点
1.引入依赖 <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zook ...