URL地址

来源:互联网 发布:阿里云邮箱域名未验证 编辑:程序博客网 时间:2024/05/17 23:18

URL地址中含有中文字符是很麻烦的,前面描述过使用GET方法提交表单的情况,使用GET方法时,参数就是包含在URL中。

 1.URL编码

对于URL中的一些特殊字符,浏览器会自动进行编码。这些字符除了"/?&"等外,还包括unicode字符,比如汉子。这时的编码比较特殊。

IE有一个选项"总是使用UTF- 8发送URL",当该选项有效时,IE将会对特殊字符进行UTF-8编码,同时进行URL编码。如果改选项无效,则使用默认编码"GBK",并且不进行 URL编码。但是,对于URL后面的参数,则总是不进行编码,相当于UTF-8选项无效。比如"中文.html?a=中文",当UTF-8选项有效时,将发送链接"%e4%b8%ad%e6%96%87.html?a=/x4e/x2d/x65/x87";而UTF-8选项无效时,将发送链接"/x4e/x2d/x65/x87.html?a=/x4e/x2d/x65/x87"。注意后者前面的"中文"两个字只有4个字节,而前者却有18个字节,这主要时URL编码的原因。

当web server(tomcat)接收到该链接时,将会进行URL解码,即去掉"%",同时按照ISO8859-1编码(上面已经描述,可以使用URLEncoding来设置成其它编码)识别。上述例子的结果分别是"/ue4/ub8/uad/ue6/u96/u87.html?a=/u4e/u2d/u65/u87"和"/u4e/u2d/u65/u87.html?a=/u4e/u2d/u65/u87",注意前者前面的"中文"两个字恢复成了6个字符。这里用"/u",表示是unicode。

所以,由于客户端设置的不同,相同的链接,在服务器上得到了不同结果。这个问题不少人都遇到,却没有很好的解决办法。所以有的网站会建议用户尝试关闭UTF-8选项。不过,下面会描述一个更好的处理办法。

opera中编码的方式:

我查阅了很多的资料才发现在opera这个浏览器中采用的编码方式是:

先用UTF8对字符串进行编码,然后按RFC1738进行编码

这是查到的文档中这样说明实际上采用的编码方式为:

首先对汉字的GBK编码转化成UTF-8编码,然后再采用urlcode的编码方式转化成url的汉字编码。

原创粉丝点击