Chinaunix首页 | 论坛 | 博客
  • 博客访问: 121310
  • 博文数量: 24
  • 博客积分: 1380
  • 博客等级: 中尉
  • 技术积分: 495
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-24 09:50
文章分类
文章存档

2011年(1)

2009年(14)

2008年(9)

我的朋友

分类:

2009-04-27 15:26:07

我们先来看以下几个请求,看a.aspx 页面用Request.QueryString接受到的是啥信息?
  页面URL Request.QueryString["info"]接受到的值
案例一 a.aspx?info=%25 %

案例二 a.aspx?info=%bc%bc%ca%f5 ????

情况分析:
案例一
a.aspx?info=%25 为何 Request.QueryString["info"]接受到的值是 % ,而不是 %25,是因为Request.QueryString 替我们在接受到值后,做了一次URL解码。 HttpUtility.UrlDecode("%25")  的计算结果就是 %
上面的这个案例一虽然看起来很简单。但是我们在一些特殊场景时候,就会因为这个而极度郁闷。
比如以下几种情况:
你有一个自己的加密算法,而这个加密算法,某些情况下会计算出带百分号的结果,而这个结果你是要通过URL参数的方式传递给其它页面的。
这时候你就苦恼的发现,某些时候某个功能就不能用。
如果解决案例一碰到的情况呢?
解决方案一:
把需要传递的参数传递前作一次 HttpUtility.UrlEncode ,
记得是按照 UTF-8 的编码的 UrlEncode 。这样如果我们希望客户端接受到的是 %25  就应该传递的是 %2525 。
切记,不可在接受方每次接受后,自作聪明的都做一次 UrlEncode 。而是在发送方做 UrlEncode 。
如果接受方接受后作 UrlEncode 的话,就会出现下面情况:
发送方发送 a.aspx?info=%25 ,这时候如果接受方  接受后作 UrlEncode 的话,一切正确
发送方发送 a.aspx?info=% ,这时候如果接受方  接受后作 UrlEncode 的话,则就乱了。
另:这套方案中切记, UrlEncode  和 UrlDecode 的次数应该一一对应。不能多一次,也不能少一次。
有人就会说,这还会出现次数不对应么? 比如下面情况,一个不留意就很可能出现次数不对应。而出现不是你所期望的情况。
比如我们有这样类似的功能:
a.aspx 页面中,根据传入的 from 参数,自动跳转到 from 参数(用Request.QueryString["from"]来接受这个参数)设置的页面。
b.aspx 页面也是同样的逻辑,根据传入的 from 参数(用Request.QueryString["from"]来接受这个参数),自动跳转到指定的页面。
c.aspx 页面也是同样的逻辑,根据传入的 from 参数(用Request.QueryString["from"]来接受这个参数),自动跳转到指定的页面。

这样我们就可能书写下面的链接地址:
a.aspx?from=b.aspx 
a.aspx?from=b.aspx?from=c.aspx
a.aspx?from=b.aspx?from=c.aspx?from=http://blog.joycode.com/ghj/
下面再复杂一点,我给下面几个链接,其中都有 a 这个参数,请告诉我 a 这个参数是被那个页面接受到了?
说明:  HttpUtility.UrlEncode("&")  == "%26"    HttpUtility.UrlEncode("%")  == "%25"
地址 a 参数会被那个页面接受到
a.aspx?from=b.aspx?from=c.aspx&a=1 a 参数被 a.aspx 页面接受到了
a.aspx?from=b.aspx?from=c.aspx%26a=1 a 参数被 b.aspx 页面接受到了
a.aspx?from=b.aspx?from=c.aspx%2526a=1 a 参数被 c.aspx 页面接受到了
如果想不明白,就想想下面这句话
每一次用 Request.QueryString 获取参数时候,就作了一次 HttpUtility.UrlDecode。

解决方案二:
阅读(418) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~