Server.UrlEncode、HttpUtility.UrlDecode的区别

 

以下转载自:

http://hi.baidu.com/yisqiu/blog/item/e0804bfb9243fb67024f5624.html

在对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 也是这样.

上面是从别的地方拷贝的,写得很好,我自己的一个程序中也遇到同样的问题,默认aspx是以utf-8为编码的,在我这个程序中必须用gb2312为默认编码
(<globalization requestEncoding="gb2312" responseEncoding="gb2312"/>),
问题出现了,以前没有问题的HttpUtility.UrlDecode在Page.Request回的值是乱码这就是上面说的HttpUtility.UrlDecode默认以UTF8对URL进行编码,这种情况下面只需将HttpUtility.UrlDecode改成Server.UrlEncode即可。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: `HttpUtility.UrlEncode`是一个.NET Framework类库中的方法,用于将字符串编码为URL编码格式。该方法用于将Web应用程序中的参数值、表单数据、查询字符串等转换为URL格式,可以避免URL中出现特殊字符导致解析错误的问题。例如,将空格替换为“%20”,将“&”替换为“%26”等。 ### 回答2: httputility.urlencode是一个在ASP.NET中经常使用的方法,主要用于将字符串转换为URL编码格式。使用这个方法可以确保URL中所有的字符都可以被正确的传递和识别,避免出现多种问题,如页面无法打开、参数值丢失等等。 通常情况下,httputility.urlencode主要用于将请求数据作为URL参数传递到服务器端。在这个过程中,客户端的字符会经过URL编码后以URL参数的形式传递到服务器端。在服务器端接收到这个URL参数后,再用httputility.urldecode方法进行解码,得到原始字符串数据。 需要注意的是,虽然可以使用其他方法进行URL编码(如JavaScript中的encodeURI()和encodeURIComponent()方法),但在ASP.NET中建议使用httputility.urlencode方法,因为它针对ASP.NET的机制进行了优化,能够很好地处理各种编码格式的问题。 使用httputility.urlencode方法时,可以指定编码的方式。常见的编码方式有UTF-8、GB2312等等。在使用过程中需要根据具体的使用场景来选择合适的编码方式,以确保数据能够被正确的处理。 综上所述,httputility.urlencode是一个在ASP.NET中非常有用的方法,可以确保传输的数据能够被正确的识别和处理,避免各种数据传输问题的出现。在编写ASP.NET应用程序时,建议充分利用这个方法来处理URL编码相关的问题。 ### 回答3: httputility.urlencode是一个ASP.NET框架中的类,主要用于将字符串编码为URL格式。URL编码在很多场景下都非常有用,比如对于包含特殊字符(如空格、井号、加号等)的字符串,需要将其转换为URL可能接受的形式,以避免出现歧义甚至错误。下面将从原理、用法和注意事项三个方面介绍httputility.urlencode。 一、原理 URL编码将特殊字符转换成具有特殊含义的16进制值,并在其前加上%。编码后的字符串只由以下字符构成:字母(A~Z、a~z)、数字(0~9)和这些特殊符号(- _ . ! ~ * ' ( ))。例如,对于字符串"hello world!",编码后的结果为"hello%20world%21",其中%20对应空格,%21对应感叹号。 二、用法 使用httputility.urlencode非常简单,只需在需要进行URL编码的字符串上调用其静态方法,即可得到编码后的结果。可以在ASP.NET Web Forms应用程序中的页面代码中使用它,也可以在ASP.NET MVC应用程序中的控制器代码中使用它。以下是一些使用httputility.urlencode方法的示例代码: 1. 对字符串进行编码: string encodedString = HttpUtility.UrlEncode("hello world!"); 2. 对URL中的查询字符串参数进行编码: string encodedQueryString = HttpUtility.UrlEncode("keyword=hello world&category=news"); 3. 在ASP.NET Web Forms应用程序中,在重定向到另一个页面时,对查询字符串参数进行编码: Response.Redirect("search.aspx?" + HttpUtility.UrlEncode("keyword=hello world&category=news")); 三、注意事项 虽然httputility.urlencode方法很好用,但需要注意一些问题: 1. URL编码是可逆的,也就是说,可以通过httputility.urldecode方法将编码后的字符串还原为原始字符串。但不建议依赖这种方式来保护应用程序的安全性,因为它并不能完全防止恶意攻击。 2. 如果将编码后的字符串作为URL的一部分,需要先验证其长度是否超过允许的最大长度,以免出现“过长的URL”错误。 3. 在请求或响应中使用URL编码时,需要注意使用正确的字符集,以避免出现乱码或不兼容的现象。在ASP.NET中,可以使用httputility.urlencode方法的不同重载来指定字符集。 综上所述,httputility.urlencode是一个很实用的ASP.NET类,用于将包含特殊字符的字符串转换为可以安全传输的URL编码形式。使用它需要注意一些细节和安全问题,但只要正确使用,它可以使Web应用程序更加健壮和安全。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值