URL编码:不同的操作系统、不同的浏览器、不同的网页字符集,将导致完全不同的编码结果。

时间:2024-08-09 14:04:44

  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编码了,而客户机没有对它编码。