1、问题是这样,在虚拟空间(一般的万能空间)放了个php程序,用了.net httpmodule来做url重写。如将 /tag/xxx 重写为 tag.php?s=xxx 的时候,如果xxx为英文,则一切正常,如果xxx为中文,则php的s值为??(没能正确解码)。
2、我的尝试,通过调试重写模块,发现HttpContext.Current.RewritePath重写的时候,自动将参数做了Server.UrlEncode,如果重写到aspx页面,那么通过Request["s"]可以得到自动解码的正确值。如果重写到php页面,php不能得到正确值。我尝试了在HttpContext.Current.RewritePath前,将参数自己指定UTF8编码(HttpUtility.UrlEncode(xxx, UTF8)),但是HttpContext.Current.RewritePath时候,还是要再一次编码。
请各位大侠帮忙研究一下。非常感谢了。
我的一些测试疑问:
<%=Server.UrlEncode("啊")%> 输出:%e5%95%8a
<%=Server.UrlDecode("%u554a")%>输出:啊
%u554a 这个值是在Context.ReWritePath 时候卡住断点,Server.UrlEncode("啊") 他得到的。
<%=System.Text.Encoding.Default.BodyName%> 输出:iso-8859-1
<%=HttpUtility.UrlEncode("啊", System.Text.Encoding.Default)%> 输出:%3f
<%=HttpUtility.UrlEncode("啊", System.Text.Encoding.GetEncoding("iso-8859-1"))%>输出:%3f
建议试试IIS的URL Rewrite module。
是用的虚拟空间,没有控制权,而且是iis6啊
@Pecans: 试试在PHP中进行UrlDecode
@dudu: php中urldecode也试过,同时也试过先mb_convert_encoding转码,再解码。也不行。
对了,还发现个问题,比如在HttpContext.Current.RewritePath这个地方,断点卡住,在监视里测试Server.UrlEncode("啊") 得到的结果是 %u554a,也就是重写过去的值。而在aspx页面,Server.UrlEncode("啊") 则输出 %E5%95%8A。
@Pecans: Server.UrlEncode("啊") 得到的结果是 %u554a,也就是重写过去的值。而在aspx页面,Server.UrlEncode("啊") 则输出 %E5%95%8A。使用的编码不一样。