- 论坛徽章:
- 0
|
原帖由 Namelessxp 于 2007-2-24 08:48 发表
我试过,你的说法可能适合很久以前的apache,现在的情况正好相反,现在的apache(2.0/2.2)只接受UTF8编码的url,双字节的那种是GB编码,不管是 2.0,还是2.2,都不接受,难道是传说中的 "纠枉过正"
有趣的问题。
apache 不会设计只接受 UTF-8 编码的 url,不过这个最好细节要谈到 apache 于 UNIX and WINDOWS 上平台对于档名解析上是否有设计解析差异。
现在能搜索到的大都是老版本的,建议取消IE "总是以UTF-8发送URL"的那种说法,仅有几个提出了改 Firefox的配置项 "network.standard-url.encode-utf8" 的
这个要明确聊聊。
若是 IE 预设开启使用 UTF-8 编码后导致 "无法存取 web server 的中文档名" 时,作法就是使用 "取消使用 UTF-8 传送" 选项即可解决。而 Firefox 预设本来就是关闭所以才可以存取到。而你说配置 "network.standard-url.encode-utf8" 更奇怪,若真的要改也要改成 false 才可以。
而假设 IE 开启使用 UTF-8 编码后 "才可以存取 web server 的中文档名" 时,,那 firefox 配置 "network.standard-url.encode-utf8" 才会是你所说改成 true 才对。
还有种方法就是加模块,在apache处理url前,把它们处理成通用的utf-8,此法甚好,可惜暂时不会
请把问题拉回来看,依据我前面回应:
web server 收到 http request 后,其实只会针对 url 那串进行解码,所以上面情况来说最后会有两种结果,那就是:
1. "测试网页.html" 字串内容,该内容字集编码可能是 GB2312 or BIG5 等这类编码... or
2. "测试网页.html" 字串内容,该内容字集编码是 UTF-8 编码
就 linux 系统架设 web server 来说,上面这些请求时 apache 会把 "测试网页.html" 应对到磁碟的 filesystem 找相符的档案,那就要看 linux 本身档案系统对于当初档案储存时档名是使用哪种字集编码的。而这个就会引发不同相关的结果。
主要重点是确认该 linux 本身 filesystem 储存该文档到底名称是不是 utf-8 encoding 这类,这个才能够决定 web-browser 这边到底要不是配置使用 UTF-8 传送 URL 功能项目。
那目前 web server 若是 windows 的话,那 windows 2000 or xp 这类系统本身 filesystem 一定为 unicode 编码储存档名。继续看一下 apache 2.0 release note:
- Native Windows NT Unicode Support
- Apache 2.0 on Windows NT now uses utf-8 for all filename encodings. These directly translate to the underlying Unicode file system, providing multilanguage support for all Windows NT-based installations, including Windows 2000 and Windows XP. This support does not extend to Windows 95, 98 or ME, which continue to use the machine's local codepage for filesystem access.
复制代码
那结论是 windows 2k 等系统上跑 apache,底层档名存取都是走 unicode,所以浏览器那端的确要把含中文 url 编码为 UTF-8 后才可以正常存取。而预设 firefox 不会把 URL 编码成为 UTF-8 项目,所以浏览下面这类 URL 的确会出问题。
- http://hostname/测试网页.html"
复制代码
不过 windows apache 本身有改过一些架构,有趣的在于若是浏览一个可以显示目录结构内中文档名清单项目时,"测试网页.html" 会呈现如下连结格式:
- http://hostname/%e6%b8%ac%e8%a9%a6%e7%b6%b2%e9%a0%81.html
复制代码
后面那段 7bit urlencoding 项目,解码后就是 utf-8 编码的 "测试网页.html" 字串。
那这个问题讨论到最后,其实要依据对方的平台情况 ( unix 下还要考虑 filesystem 本身档名使用的 encoding charset 项目 )来决定浏览端的配置是否要选 utf-8 传送 url 项目。
更清楚一点说:
1. 安装 apache 2.0 等版本于 windows 2k、xp 这类支援 unicode 环境上时,浏览器那边要设定使用 UTF-8 编码传送 URL 。
2. 安装 apache 2.0 等版本于 unix,浏览器那边是否要设定使用 UTF-8 编码传送 URL ,得依据该 web server 的档名是否使用 UTF-8 编码。大部分传统一般 UNIX 还不流行使用 UTF-8 编码储存档名,比方使用 zh_CN.GB2312 等为工作环境项目,所以一般传送 UTF-8 编码一般都要关闭.
--
[ 本帖最后由 kenduest 于 2007-2-26 03:21 编辑 ] |
|