导航

yaosansi's Blog

当你背向太阳的时候,你只会看到自己的阴影!能力是有限的,努力无限的!

« Subsonic介绍及使用CHM文件无法打开的解决方法 »

用.net生成Apache的URL编码的解决方案

  • 本站大部分内容从网上收集,收集目的仅供研究、学习。涉及版权或不希望收录您的文章请您及时与我联系。
  • 本站IM群,请自行选择。请各位朋友按照自己喜好加入。加入群后请及时发言,防止被清理。谢谢您的合作!!!
  • QQ群:Y①WEB开发(ASP.NET)号码:7351660 QQ群:Y②WEB开发(ASP+.NET)号码:11864905
  • QQ群:Y③WEB开发(DIV+CSS)号码:16610506 QQ群:Y④WEB开发(JS+AJAX)号码:16143998
  • QQ群:Y⑤WEB开发(新手)号码:12777715 MSN群:yaosansi[at]126.com

原文:http://www.yaosansi.com/post/1368.html

服务器环境:Linux + Apache

原字符串:

[ADO] Microsoft ADO 2.5 程序员参考.chm

Apache 编码后字符串:

%5BADO%5D%20Microsoft%20ADO%202.5%20%B3%CC%D0%F2%D4%B1%B2%CE%BF%BC.chm

.net 中

System.Web.HttpUtility.UrlEncode("[ADO] Microsoft ADO 2.5 程序员参考.chm");
 
结果:
%5bADO%5d+Microsoft+ADO+2.5+%e7%a8%8b%e5%ba%8f%e5%91%98%e5%8f%82%e8%80%83.chm

 

1.更改Encoding为Gb2312

看起来有很大差异,经测试Apache 使用的编码为gb2312,所以改为如下代码:

System.Web.HttpUtility.UrlEncode("[ADO] Microsoft ADO 2.5 程序员参考.chm", System.Text.Encoding.GetEncoding("gb2312"));
结果:
%5bADO%5d+Microsoft+ADO+2.5+%b3%cc%d0%f2%d4%b1%b2%ce%bf%bc.chm

2.将+号替换成%20

经比较两行代码已经非常相似了,但可以明显看出.net生成的代码中包含"+"号,而Apache 编码后的符串是没有的.对应的位置是%20,所以将+号替换成%20.

 

HttpUtility.UrlEncode("[ADO] Microsoft ADO 2.5 程序员参考.chm", Encoding.GetEncoding("gb2312")).Replace("+", "%20");

结果:

%5bADO%5d%20Microsoft%20ADO%202.5%20%b3%cc%d0%f2%d4%b1%b2%ce%bf%bc.chm

3.使用正则替换编码后的字符为大写

现在除了一些字符大小写不同外,结果与Apache生成的代码基本上可以说是一致了(按照IIS的习惯),由于Apache 默认是区分大小写的.所以我们高兴的还早了点.这样的编码结果Apache 仍然会提示找不到文件.

仔细观察经过编码后的双字节字符(也就是形如%5B)在Apache中都是大写字母,而原始的英文字母大小写Apache并没有改变.所以将整个字符串全部大写是行不通的.

这里采用了正则来替换相应编码后的字符串.

代码如下:

protected static string getReg(string str)
 {
     MatchEvaluator myEvaluator = new MatchEvaluator(ReplaceMe);
     string pattern = "%(.{2})";
     string s= Regex.Replace(str, pattern, myEvaluator);
     return s;
 }
 
 protected static string ReplaceMe(Match m)
 {
     return m.Value.ToUpper();
 }

之后便可以使用getReg()方法更改编码后的字符了.

string UrlEncodeStr = HttpUtility.UrlEncode("[ADO] Microsoft ADO 2.5 程序员参考.chm", Encoding.GetEncoding("gb2312")).Replace("+", "%20");
UrlEncodeStr=getReg(UrlEncodeStr);

最终结果:
%5BADO%5D%20Microsoft%20ADO%202.5%20%B3%CC%D0%F2%D4%B1%B2%CE%BF%BC.chm

原创文章如转载,请注明:转载自http://www.yaosansi.com
订阅本站,阅读更多文章

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-Blog .Theme from Google黑板报 By Washun

Copyright 2005-2008 yaosansi'site All Rights Reserved.

感谢Denny·G 为本站提供FTP空间
辽ICP备05021434号

Search

  •  

赞助商广告

控制面板

最新评论及回复

最近发表