htaccess Rewrite中文编码的问题

发布时间:2020-10-16编辑:脚本学堂
htaccess Rewrite中文编码的问题,如何解决呢?参考下本文中的介绍吧。

.htaccess文件
RewriteRule ^(.*).html$ index.php?id=$1

对于一个网址http://www.jb200.com/我是谁.html
会遇到以下4种情况
http://www.jb200.com/我是谁.html (这里的”我是谁”是GB2312编码)
IE打开,接收到的id是utf8编码的”我是谁”
FireFox打开,接收不到id值,并且apache会出现403错误。
说明一下,因为FireFox会将”我是谁”自动urlencode,如果你的页面链接中”我是谁”的编码是gb2312就会出错。
http://www.jb200.com/我是谁.html (这里的”我是谁”是UTF8编码)
IE和FireFox打开,都可以接收到id值
http://www.jb200.com/%CE%D2%CA%C7%CB%AD.html (这里是urlencode后的”我是谁”GB2312编码)
IE和FireFox打开,都接收不到id值,并且Apache会出现403错误。
http://www.jb200.com/%E6%88%91%E6%98%AF%E8%B0%81.html (这里是urlencode后的”我是谁”UTF8编码)
IE和FireFox打开,都可以接收到id值

说明:
“我是谁”的UTF8编码urlencode后为 %E6%88%91%E6%98%AF%E8%B0%81
“我是谁”的GB2312编码urlencode后为 %CE%D2%CA%C7%CB%AD

总结:
Rewrite只接收UTF8
IE和FireFox对中文URL的编码不同,要注意。
这也是为什么上面的例子接收不到id值,并且出403错误.
因此,页面中的链接最好是UTF8编码的,如果是GB2312,则会有问题,最好是UTF8编码并urlencode,即上文中例4那样的。