|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
我见过net网页编程运行在手机上,包括很廉价的山寨手机,但是却暂时没发现.net在手机上有什么作为。wp7可能是个转机,但是按照《net网页编程的跨平台就是一句谎言。那.net的跨平台也当之无愧是一句谎言。明天,茄子_2008反应他博客中的“C++”标签生效。反省了一下代码,天生链接时用的是HttpUtility.UrlEncode(url),从链接地点猎取标签时用的是HttpUtility.UrlDecode(url),从Encode到Decode,“C++”酿成了“C”(加号酿成空格)。这是人人熟知的成绩,这里我们剖析一下这个成绩,并给出办理办法。
先看一下成绩产生的历程:
1.原始链接:
- http://www.ckuyun.com/xd502djj/tag/C++/
复制代码 2.HttpUtility.UrlEncode以后,失掉:
- http://www.ckuyun.com/xd502djj/tag/C%2b%2b/
复制代码 3.Request.RawUrl,失掉:
- http://www.ckuyun.com/xd502djj/tag/C++/
复制代码 4.HttpUtility.UrlDecode,失掉:
- http://www.ckuyun.com/xd502djj/tag/C/
复制代码 下面第3步已失掉准确的了局,第4步的UrlDecode反而将加号变成了空格。
看来办理办法很复杂,作废画蛇添足的UrlDecode,入手下手我们也是这么干的。过了一段工夫,有效户反应“WindowsPhone”的标签生效了,酿成了“Windows+Phone”。我们一查,本来是在HttpUtility.UrlEncode时,空格被转换为加号,必要挪用UrlDecode将加号复原为空格,因而又把HttpUtility.UrlDecode加上(忘了之前的“C++”标签成绩)。然后,“C++”标签又生效...如许反重复复,看似Bug良多,事情很忙,实践上就是一个Bug...
终究有一天,我们说“不再能如许过”,入手下手寻觅办理计划:
既然HttpUtility.UrlEncode()不克不及用,那在.NET中找找有无替换品。
先找到了HttpUtility.UrlPathEncode()。嘿,有效,轻松弄定“C++”与空格成绩,可是...厥后发明弄不定“C#”,它没有对“#”举行编码。
持续寻觅...找到了Uri.EscapeUriString(),与HttpUtility.UrlPathEncode()一样的成绩。
持续寻觅...终究找到了...Uri.EscapeDataString(),弄定!请看上面的测试代码:
- publicvoidUrlEncodeTest(){stringurl="C++C#";Console.WriteLine(HttpUtility.UrlEncode(url));//C%2b%2b+C%23Console.WriteLine(HttpUtility.UrlPathEncode(url));//C++%20C#Console.WriteLine(Uri.EscapeUriString(url));//C++%20C#Console.WriteLine(Uri.EscapeDataString(url));//C%2B%2B%20C%23}
复制代码
注:运转情况.NET4。
可怜的程序员,还是逃不出移植的命运! |
|