Andy's Blog » » Rewrite编码问题解决

Rewrite编码问题解决

关于Rewrite问题,困扰我很久了,今天经过解决,与大家分享.

.htaccess文件

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

对于一个网址http://www.21andy.com/我是谁.html 我们将会遇到以下4种情况

  1. http://www.21andy.com/我是谁.html (这里的"我是谁"是GB2312编码)
    IE打开,接收到的id是utf8编码的"我是谁"
    FireFox打开,接收不到id值,并且Apache会出现403错误。
    这里需要着重说明一下,因为FireFox会将"我是谁"自动urlencode,如果你的页面链接中"我是谁"的编码是gb2312就会出错。
  2. http://www.21andy.com/我是谁.html (这里的"我是谁"是UTF8编码)
    IE和FireFox打开,都可以接收到id值
  3. http://www.21andy.com/%CE%D2%CA%C7%CB%AD.html (这里是urlencode后的"我是谁"GB2312编码)
    IE和FireFox打开,都接收不到id值,并且Apache会出现403错误。
  4. http://www.21andy.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

结论:

  1. Rewrite只接收UTF8
  2. IE和FireFox对中文URL的编码不同,要注意.
    这也是为什么上面的例子接收不到id值,并且出403错误.
  3. 为了避免这种情况出现,页面中的链接最好是UTF8编码的,如果是GB2312,一定会有问题.
  4. 最好的习惯是UTF8编码并urlencode,也就是上文的例4.

这个问题困扰我很久,今天终于解决! 高兴!

本文本人原创,转载请注明http://www.21andy.com出处

Tags: rewrite, 编码

本文地址: http://www.21andy.com/new/20060828/400.html

2 评论 to “PHP开源CMS之MODx”

  1. hopol 于 2006-08-29 00:06:42 发表:

    用 iconv 可以很好的 解决 ^_^

    我用的
    $Keyword = iconv("UTF-8", "gbk", $Keyword);

  2. Andy 于 2006-08-29 03:32:03 发表:

    跟iconv无关
    你没看我写的什么,都接收不到值,拿什么iconv