- 浏览: 190076 次
- 性别:
- 来自: 深圳
文章分类
最新评论
在对URL进行编码时,该用哪一个?这两都使用上有什么区别吗?
测试:
string file="文件上(传)篇.doc";
string Server_UrlEncode=Server.UrlEncode(file);
string Server_UrlDecode=Server.UrlDecode(Server_UrlEncode);
string HttpUtility_UrlEncode=System.Web.HttpUtility.UrlEncode(file);
string HttpUtility_UrlDecode=System.Web.HttpUtility.UrlDecode(HttpUtility_UrlEncode);
Response.Write("原数据:"+file);
SFun.WriteLine("Server.UrlEncode:"+Server_UrlEncode);
SFun.WriteLine("Server.UrlDecode:"+Server_UrlDecode);
SFun.WriteLine("HttpUtility.UrlEncode:"+HttpUtility_UrlEncode);
SFun.WriteLine("HttpUtility.UrlDecode:"+HttpUtility_UrlDecode);
输出:
原数据:文件上(传)篇.doc
Server.UrlEncode:%ce%c4%bc%fe%c9%cf%a3%a8%b4%ab%a3%a9%c6%aa.doc
Server.UrlDecode:文件上(传)篇.doc
HttpUtility.UrlEncode:%e6%96%87%e4%bb%b6%e4%b8%8a%ef%bc%88%e4%bc%a0%ef%bc%89%e7%af%87.doc
HttpUtility.UrlDecode:文件上(传)篇.doc
区别在于:HttpUtility.UrlEncode()默认是以UTF8对URL进行编码,而Server.UrlEncode()则以默认的编码对URL进行编码。
在用 ASP.Net 开发页面的时候, 我们常常通过 System.Web.HttpUtility.UrlEncode 和 UrlDecode 在页面间通过 URL 传递参数. 成对的使用 Encode 和 Decode 是没有问题的.
但是, 我们在编写文件下载的页面的时候, 常常用如下方法来指定下载的文件的名称:
Response.AddHeader("Content-Disposition","attachment; filename="
+ HttpUtility.UrlEncode(fileName, Encoding.UTF8));
之所以转换成 UTF8 是为了支持中文文件名.
这 时候问题就来了, 因为 HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号('+'), 在 Decode 的时候将加号转为空格, 但是浏览器是不能理解加号为空格的, 所以如果文件名包含了空格, 在浏览器下载得到的文件, 空格就变成了加号.
一个解决办法是, 在 HttpUtility 的 UrlEncode 之后, 将 "+" 替换成 "%20"( 如果原来是 "+" 则被转换成 "%2b" ) , 如:
fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
fileName = fileName.Replace("+", "%20");
不明白微软为什么要把空格转换成加号而不是"%20". 记得 JDK 的 UrlEncoder 是将空格转换成 "%20"的.
经检查, 在 .Net 2.0 也是这样.
如果程序中必须用gb2312为默认编码(<globalization requestEncoding="gb2312" responseEncoding="gb2312"/>),问题出现了,以前没有问题的HttpUtility.UrlDecode在Page.Request回的值是乱码这就是上面说的HttpUtility.UrlDecode默认以UTF8对URL进行编码,这种情况下面只需将HttpUtility.UrlDecode改成Server.UrlEncode即可。
测试:
string file="文件上(传)篇.doc";
string Server_UrlEncode=Server.UrlEncode(file);
string Server_UrlDecode=Server.UrlDecode(Server_UrlEncode);
string HttpUtility_UrlEncode=System.Web.HttpUtility.UrlEncode(file);
string HttpUtility_UrlDecode=System.Web.HttpUtility.UrlDecode(HttpUtility_UrlEncode);
Response.Write("原数据:"+file);
SFun.WriteLine("Server.UrlEncode:"+Server_UrlEncode);
SFun.WriteLine("Server.UrlDecode:"+Server_UrlDecode);
SFun.WriteLine("HttpUtility.UrlEncode:"+HttpUtility_UrlEncode);
SFun.WriteLine("HttpUtility.UrlDecode:"+HttpUtility_UrlDecode);
输出:
原数据:文件上(传)篇.doc
Server.UrlEncode:%ce%c4%bc%fe%c9%cf%a3%a8%b4%ab%a3%a9%c6%aa.doc
Server.UrlDecode:文件上(传)篇.doc
HttpUtility.UrlEncode:%e6%96%87%e4%bb%b6%e4%b8%8a%ef%bc%88%e4%bc%a0%ef%bc%89%e7%af%87.doc
HttpUtility.UrlDecode:文件上(传)篇.doc
区别在于:HttpUtility.UrlEncode()默认是以UTF8对URL进行编码,而Server.UrlEncode()则以默认的编码对URL进行编码。
在用 ASP.Net 开发页面的时候, 我们常常通过 System.Web.HttpUtility.UrlEncode 和 UrlDecode 在页面间通过 URL 传递参数. 成对的使用 Encode 和 Decode 是没有问题的.
但是, 我们在编写文件下载的页面的时候, 常常用如下方法来指定下载的文件的名称:
Response.AddHeader("Content-Disposition","attachment; filename="
+ HttpUtility.UrlEncode(fileName, Encoding.UTF8));
之所以转换成 UTF8 是为了支持中文文件名.
这 时候问题就来了, 因为 HttpUtility.UrlEncode 在 Encode 的时候, 将空格转换成加号('+'), 在 Decode 的时候将加号转为空格, 但是浏览器是不能理解加号为空格的, 所以如果文件名包含了空格, 在浏览器下载得到的文件, 空格就变成了加号.
一个解决办法是, 在 HttpUtility 的 UrlEncode 之后, 将 "+" 替换成 "%20"( 如果原来是 "+" 则被转换成 "%2b" ) , 如:
fileName = HttpUtility.UrlEncode(fileName, Encoding.UTF8);
fileName = fileName.Replace("+", "%20");
不明白微软为什么要把空格转换成加号而不是"%20". 记得 JDK 的 UrlEncoder 是将空格转换成 "%20"的.
经检查, 在 .Net 2.0 也是这样.
如果程序中必须用gb2312为默认编码(<globalization requestEncoding="gb2312" responseEncoding="gb2312"/>),问题出现了,以前没有问题的HttpUtility.UrlDecode在Page.Request回的值是乱码这就是上面说的HttpUtility.UrlDecode默认以UTF8对URL进行编码,这种情况下面只需将HttpUtility.UrlDecode改成Server.UrlEncode即可。
发表评论
文章已被作者锁定,不允许评论。
-
UMeditor
2015-01-07 16:50 432UMeditor,简称UM,是为满足广大门户网站对于简单发帖 ... -
使用SignalR构建一个最基本的web聊天室
2015-01-06 15:09 770使用SignalR,可以使用服务器消息推送到客户端,件demo ... -
lazyload异步加载图片
2014-12-24 15:18 537如果一个网页很长并且有很多图片的话,下载图片就需要很多时间 ... -
一台服务器访问另外一台服务器的共享目录
2014-12-19 10:50 611情况:A服务器的asp.ne程序需访问B服务器的共享目录, ... -
windows7 IIS7报错:如果要使用托管的处理程序,请安装 ASP.NET
2014-12-19 10:31 2415aspx 常见错误 CS0016: 未能写入输出文件“c:/ ... -
windows7 IIS7报错:如果要使用托管的处理程序,请安装 ASP.NET
2014-12-19 10:30 675windows7 IIS7报错:如果要使用托管的处理程序,请 ... -
Cookie小知识
2014-12-17 11:02 600如果cookie设置了过期时间,cookie就会保存在硬盘中 ... -
提升对ASP.NET网站性能和多并发的设计的讨论
2014-09-03 09:49 738对于如何提高应用程序 ... -
远程服务器返回错误: (500) 内部服务器错误 (解决方案)
2013-12-19 18:00 14187“/”应用程序中的服务器错误。 远程服务器返回错误: ... -
checbox,redio超强样式运用
2013-06-04 16:49 806<html xmlns="http://ww ... -
html页面获取参数加载数据,提高访问速度
2013-06-03 14:49 846如果你的网站很多数据是用jquery ajax获取的,那就没 ... -
一个避免用户重复点击按钮造成重复数据的小技巧
2013-01-13 16:13 1231<script> //启用 ... -
网页链接到QQ
2012-12-05 18:59 799<a target="_blank" ... -
SWFupload 上传控件的使用的使用
2012-12-02 16:17 875-- 首先说个解决 ie兼容的标签 <meta ht ... -
评论的延迟加载
2012-11-10 18:34 787看verycd、cnbeta的评论区域很奇怪,每次看完了正文, ... -
id,name的小区别
2012-11-08 23:42 627很多时候,很多人喜欢只写id,不写name,不过这两个作用还是 ... -
SessionID的本质
2012-11-05 23:08 712一、客户端用cookie保存了sessionID 客户 ... -
进程管理运用,防盗链,权限限制
2012-11-05 22:58 596图片防止盗链 void Appl ... -
进程外session配置
2012-11-05 22:57 882进程外session StateServer 对象必须可序列 ... -
分页底层实现(超原理)
2012-10-16 22:19 960--样式 .paginator{ font: 12px ...
相关推荐
在Visual Studio 2005环境下,我们可以使用内置的.NET Framework类库来实现`urlEncode`和`urlDecode`功能。`System.Web`命名空间下的`HttpUtility`类提供了这两个方法: 1. `HttpUtility.UrlEncode`: 这个静态方法...
1. **方法类型**:`HttpUtility.UrlEncode`和`HttpUtility.UrlDecode`是静态方法,而`Server.UrlEncode`和`Server.UrlDecode`是实例方法,需要通过`HttpServerUtility`类的实例(如`Page`类的`Server`属性)来调用。...
`Server.UrlEncode`和`Server.UrlDecode`与`HttpUtility`类中的方法功能相同,但它们更易于在服务器端脚本中使用。 在实际应用中,URL编码通常用于以下场景: 1. 表单提交:当用户通过HTML表单提交数据时,如果数据...
str=”+HttpUtility.UrlEncode(str) ,解码方式为HttpUtility.UrlDecode(Request.QueryString[“str”].ToString().Trim()) asp的Get方式传送为”webPage.aspx?str=”+server.urlencode(str) 两种编码不统一 解决方案...
在传递中文参数时,可以使用`Server.UrlEncode()`函数对中文字符进行编码,然后在接收端使用`Server.UrlDecode()`进行解码。例如: - 发送端: ```csharp string Name = "中文参数"; Response.Redirect("B.aspx...
在服务器端,可以使用`Server.UrlEncode()`和`Server.UrlDecode()`方法。例如: ```csharp // 传递中文参数 string Name = "中文参数"; Response.Redirect("B.aspx?Name=" + Server.UrlEncode(Name)); // 接收中文...
总结来说,解决.NET中URL中文参数值乱码问题的方法主要包括在web.config中进行全局编码设置、使用Server.UrlEncode和Server.UrlDecode方法编码解码参数、使用JavaScript的escape函数、以及在编程中使用...
在ASP.NET中,我们可以使用`System.Web.HttpContext.Current.Server.UrlEncode`方法对中文字符串进行编码,然后再使用`System.Web.HttpContext.Current.Server.UrlDecode`方法进行解码,以确保数据在Cookie中的正确...
要使用`UrlEncode`函数,首先需要引用`System.Web`命名空间,因为它包含`HttpUtility`类,这个类提供了`UrlEncode`和`UrlDecode`方法。下面是一个简单的示例: ```csharp using System; using System.Web; ...
然而,现代的ASP.NET框架提供了内置的HttpUtility.UrlEncode和HttpUtility.UrlDecode方法,这些方法更加高效和安全,建议在可能的情况下使用这些内置函数。但在旧的ASP项目中,自定义函数仍是一种实用的解决方案。
string tradeName = System.Web.HttpUtility.UrlDecode(Request.QueryString["TradeName"].ToString()); string model = System.Web.HttpUtility.UrlDecode(Request.QueryString["model"].ToString()); string ...
有时候可能会有这么一个需求,我在后台使用: 代码如下: HttpUtility.UrlEncode(str, System.Text.Encoding.UTF8); 将Url进行编码,前台JS需要使用这段内容,这时候就需要解码了: 代码 代码如下: /** * Url编码 **/ ...
3、直接用Server.UrlEncode和Server.Decode进行加码和解码操作,这种方法对于发送方和接收方都在一个项目中是可行的,现在的问题是,我们要随意去访问别人的系统,所以只能弃用此方法了。 4、采用HttpUtility...
当需要恢复原始字符串时,可以使用`HttpUtility.UrlDecode`方法: ```csharp string decoded = HttpUtility.UrlDecode(encoded); // decoded 的值为 "exit" ``` 3. **编码特定字符集**: 在某些情况下,可能...
在ASP.NET中,我们可以使用HttpUtility.UrlEncode和HttpUtility.UrlDecode方法进行这类操作。同时,HTML编码也非常重要,可以防止XSS(跨站脚本)攻击,HttpUtility.HtmlEncode和HttpUtility.HtmlDecode则是对应的...
Dim uName As String = System.Web.HttpContext.Current.Server.UrlDecode(System.Web.HttpContext.Current.Request.Cookies(strCookieName)(strKeyName)) Dim objEnc As System.Text.Encoding = System.Text....
5. **解码**: 对于已经编码的URL,可以使用`HttpUtility.UrlDecode`或`HttpServerUtility.UrlDecode`来解码。这两个方法会将百分号编码的字符串还原为原始字符。 6. **编码特定字符**: 有时,我们可能需要仅编码URL...