转载自:http://blog.csdn.net/wangjun_1218/article/details/4330244
尽管有很多规范URL的标准,例如RFC 3987,但实际应用中却非常混乱。本文主要介绍浏览器发送URL到服务器的一些特性,作为开发和应用的参考。
通常浏览器会用两种编码方式发送URL到服务器,分别是UTF-8和ANSI(当前系统语言设置,在Windows系统中可以理解为当前代码页)。接下来分别介绍几种常用浏览器发送URL的编码特性。
中文Windows环境下,假如直接在浏览器的地址栏输入URL:
http://www.charset.cn/中国.html?kw=中国
1、IE浏览器特性
PATH部分 | 参数部分 | |
---|---|---|
UTF-8模式(默认) | %E4%B8%AD%E5%9B%BD.html | kw=中国 |
UTF-8编码、urlencode | GBK编码、无urlencode | |
ANSI模式 | 中国.html | kw=中国 |
GBK编码、无urlencode | GBK编码、无urlencode |
中文Windows环境下,IE中默认发送的URL的PATH部分是UTF-8编码,参数部分是GBK编码。IE的设置选项中有一项是“总是以 UTF-8 发送URL”可以改变发送URL的编码为ANSI。
2、FireFox浏览器特性
PATH部分 | 参数部分 | |
---|---|---|
UTF-8模式 | %E4%B8%AD%E5%9B%BD.html | kw=%E4%B8%AD%E5%9B%BD |
UTF-8编码、urlencode | UTF-8编码、urlencode | |
ANSI模式(默认) | %D6%D0%B9%FA.html | kw=%D6%D0%B9%FA |
GBK编码、urlencode | GBK编码、urlencode |
中文Windows环境下FireFox中默认发送的URL的PATH和参数都是GBK编码,在FireFox地址栏输入“about:config”,找到选项“network.standard-url.encode-utf8”,即可改变发送URL的编码方式。
3、Opera浏览器特性
PATH部分 | 参数部分 | |
---|---|---|
UTF-8模式(默认) | %E4%B8%AD%E5%9B%BD.html | kw=%E4%B8%AD%E5%9B%BD |
UTF-8编码、urlencode | UTF-8编码、urlencode |
在地址栏的url编码中,空格被编码为%20,+号不变。
在不同的浏览器中打开不同编码的网页中的链接,特性也不相同。在不改变浏览器默认选项情况下访问不同编码的网页中以下链接:
http://www.charset.cn/中国.html?kw=中国
PATH部分 | 参数部分 | |
---|---|---|
UTF-8网页 | %E4%B8%AD%E5%9B%BD.html | kw=中国 |
UTF-8编码、urlencode | UTF-8编码、无urlencode | |
GBK网页 | %E4%B8%AD%E5%9B%BD.html | kw=中国 |
UTF-8编码、urlencode | GBK编码、无urlencode |
PATH部分 | 参数部分 | |
---|---|---|
UTF-8网页 | %E4%B8%AD%E5%9B%BD.html | kw=%E4%B8%AD%E5%9B%BD |
UTF-8编码、urlencode | UTF-8编码、urlencode | |
GBK网页 | %D6%D0%B9%FA.html | kw=%D6%D0%B9%FA |
GBK编码、urlencode | GBK编码、urlencode |
如果改变IE默认选项为ANSI模式或者将FireFox改为UTF-8模式的访问结果可以自己测试。
ajax的GET请求在IE下不管页面是什么编码,发送的都是GBK编码(本地编码,无urlencode)。 在firefox中发送的情况,按照页面编码进行发送,并且有urlencode。
表单get请求,按照页面编码,urlencode
在表单的get请求url编码中,空格被编码为+,+号编码为%2B