URL编码:不同的操作系统、不同的浏览器、不同的网页字符集,将导致完全不同的编码结果。
因此如果Url中有中文或特殊字符,一定要自己调用函数编码解码,不要让浏览器帮你编码,否则出现了问题会浪费你很多时间才能找到原因。
编码的实验网上有文章,请看此处:http://www.ruanyifeng.com/blog/2010/02/url_encoding.html
文章中的几个结论:
(1)结论1就是,网址路径的编码,用的是utf-8编码。
如 http://zh.wikipedia.org/wiki/%E6%98%A5%E8%8A%82 后面两个字是"春节"的编码。
(2)结论2就是,查询字符串的编码,用的是操作系统的默认编码。
如http://www.baidu.com/s?wd=春节,后面两个字会被编码。
(3)结论3就是,GET和POST方法的编码,用的是网页的编码。
这时的编码方法由网页的编码决定,也就是由HTML源码中字符集的设定决定。
<meta http-equiv="Content-Type" content="text/html;charset=xxxx">
如果上面这一行最后的charset是UTF-8,则URL就以UTF-8编码;如果是GB2312,URL就以GB2312编码。百度和谷歌用的就不同。
(4)在Ajax调用中,IE总是采用GB2312编码(操作系统的默认编码),而Firefox总是采用utf-8编码。
可以使用的编码如下:
1,
encodeURI()是Javascript中真正用来对URL编码的函数。
它着眼于对整个URL进行编码,因此除了常见的符号以外,对其他一些在网址中有特殊含义的符号"; / ? : @ & = + $ , #",也不进行编码。编码后,它输出符号的utf-8形式,并且在每个字节前加上%。
它对应的解码函数是decodeURI()。
需要注意的是,它不对单引号‘编码。
八、Javascript函数:encodeURIComponent()
最后一个Javascript编码函数是encodeURIComponent()。与encodeURI()的区别是,它用于对URL的组成部分进行个别编码,而不用于对整个URL进行编码。
因此,"; / ? : @ & = + $ , #",这些在encodeURI()中不被编码的符号,在encodeURIComponent()中统统会被编码。至于具体的编码方法,两者是一样。
在JavaScript中推荐的做法是用encodeURI对URI的网址部分编码,用encodeURIComponent对URI中传递的参数进行编码。
在C#中推荐的做法是用Uri.EscapeUriString对URI的网址部分编码,用Uri.EscapeDataString对URI中传递的参数进行编码。
我遇到的问题如下:
最可能的原因是:
?在地址中可能存在键入错误。
?当您点击某个链接时,它可能已过期。
您可以尝试以下操作:
重新键入地址。
返回到上一页。
转至 并查找您想要的信息。
更多信息
此错误(HTTP 400 错误的请求)意味着 Internet Explorer 可以连接到 Web 服务器,但是因
为地址问题无法找到该网页。
有关 HTTP 错误的详细信息,请参阅帮助。
查看页面属性是:res://ieframe.dll/http_400.htm
后来对比服务器和用户机子上同一个页面的属性不同:
服务器:
http://10.14.100.78/mainegov/JobTools/ShouGuang/CHKInfoList.aspx?KeShi=
%E8%80%95%E4%BF%9D
客户机:
http://10.14.100.78/mainegov/JobTools/ShouGuang/CHKInfoList.aspx?KeShi=耕保
&&NodeID=1029
从服务器的的这个页面,转向其他页面正常,但是从客户机转向其他页面就找不到页面。
服务器浏览器对url编码了,而客户机没有对它编码。