Chinaunix首页 | 论坛 | 博客
  • 博客访问: 571305
  • 博文数量: 79
  • 博客积分: 2513
  • 博客等级: 少校
  • 技术积分: 806
  • 用 户 组: 普通用户
  • 注册时间: 2006-10-04 18:46
文章分类

全部博文(79)

文章存档

2014年(1)

2010年(5)

2009年(8)

2008年(11)

2007年(41)

2006年(13)

我的朋友

分类:

2007-04-20 19:28:16

最近在 ASP.NET 2.0 中,需要将一组字节(byte[])用 GET 参数传递到另一个 .aspx 页面,采取的办法是进行 BASE64 编码。首先将 byte[] 进行 BASE64 编码(Convert.ToBase64String),然后调用 Server.UrlEncode 进行 % 转换,因为 BASE64 里有“+”、“=” 等特殊字符。

在传递过去之后,发现转码后有百分号出现的请求都会失败。于是检查,最后发现有两个“意外”:一、获取到的 GET 参数,已经是 % 解码后的了;二、解码后的“+”进一步被解成了空格“ ”。不得以,只有对获取的 GET 参数字符串进行空格到“+”的替换,然后用 Convert.FromBase64String 解码正常。

对 URL 中的 % 进行处理,需要几分小心,因为很难知道编码前的 % 是否需要再次编码,同时也很难知道解码后的 % 是否需要再次解码。这里有一个缺陷就是,百分号本身并不能指示它是数据还是转义字符。一个编码过的百分号,经过再次编码,就可能变成“%25”,而解码的时候,就需要两次解码才行。

这样的问题在各种“转义字符”中都存在,HTML 中的表示字符“&”的“&”,可能变成 &。二次编码可能是需要的,但是却不能避免二次编码一定是正确的,尤其当编码前字符串来路不明的时候。

转义似乎是必须的,但是也是麻烦的,无赖,只有小心。
阅读(10949) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~