测试环境:
服务器 —— [本机] WIindows2003 Enterprise Edition 2003 sp2 中文版本,IIS 6.0,IE 7.0,ASP.NET 2.0
客户端 —— [本机] 同上,Firefox 2.0.0.12
作者:birdshover
本文是初步探讨文章。需要做一下几个假设:
1、网站采用的是ASP.NET部署的;
2、网站的编码是UTF-8的;
3、修改页面链接是成本很小的。
现在面临的主要问题是,页面内有很多链接,参数直接带的就是中文,这样比URL转码后的地址友好。但是,当甲用户把觉得不错的地址发送给好友乙时,问题,出现了,参数将会变成乱码!
事实上在UTF-8环境下,网站上页面的链接是可以为中文的,例如:
<a href=”http://localhost/a.aspx?key=就是中文”>http://localhost/a.aspx?key=就是中文</a>
但是,复制“http://localhost/a.aspx?key=就是中文”直接敲入地址栏,将会产生乱码。
本文旨在解决地址栏输入中文时出现的问题,这种处理方式简单,但是会与已有链接造成冲突。避免冲突的方法,比较复杂,后续文章将会介绍。
利用.net httpmodule重写,可以解决以上问题。
构造HttpModule如下:
\n
public class HookModule : IHttpModule
{
#region IHttpModule 成员
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
string rawurl = context.Request.RawUrl;
context.RewritePath(rawurl);
}
#endregion
}\n
{
#region IHttpModule 成员
public void Dispose()
{
}
public void Init(HttpApplication context)
{
context.BeginRequest += new EventHandler(context_BeginRequest);
}
void context_BeginRequest(object sender, EventArgs e)
{
HttpApplication application = (HttpApplication)sender;
HttpContext context = application.Context;
string rawurl = context.Request.RawUrl;
context.RewritePath(rawurl);
}
#endregion
}\n