http解码-2

http://bigdragon.iteye.com/blog/1626847

URI encode的过程就是把部分的url做为字符,按照某种编码方式(如:utf-8,gbk等,各浏览器不同)编码成二进制的字节码,然后每个字节用一个 包含3个字符的字符串 “%xy” 表示,其中xy为该字节的两位十六进制表示形式。另外也会将空格替换成”+”。

各浏览器的编码不同”且用户可以自己设置默认编码,这导致了很多不同可能。这也就是为什么IE可以firefox乱码,这个机器可以另一台机器乱码的根源。你无法确定不同的浏览器是使用了什么编码对URI中的非ASCII字符进行编码(ascII可读字符不编码)的,所以你无法在服务器是确定自己使用什么解码。更要命的是不同的服务器也有自己默认的解码。例如Tomcat的解码格式为ISO-8859-1(可以修改server.xml修改)

首先浏览器只会对非ASCII字符进行编码,所以在经过两次或一次encodeURI编码之后,浏览器的编码不会起作用。那为什么要进行两次编码呢?

因为不确定服务器端是使用何种编码进行URI的解码。当然如果你很确信你使用的平台是固定的那就不需要了。如果想要代码跨平台则需要考虑。光这么将不够直接,看下的过程(假设服务器为Tomcat):

“中文”  ==encodeURI==>  ”%E4%B8%AD%E6%96%87″  ==encodeURI(%被编码)==>  ”%25E4%25B8%25AD%25E6%2596%2587″   ==Tomcat解码(ISO-8859-1)==>    ”%E4%B8%AD%E6%96%87″ ==Java decode(UTF-8)==>  ”中文”

可以看到进行了两次utf-8编码,一次ISO-8859-1解码,一次utf-8解码。因为ISO-8859-1与utf-8都包含了ASCII字符集(%属于其中之一),所以不会出现乱码。

 

http://blog.chinaunix.net/uid-24148050-id-344309.html

当用户通过表单(FORM)提交信息时,浏览器会首先会按照一定规则对这些信息进行编码。
这些编码规则主要包含以下几点:   
  使用“=”分割表单中元素的名称及其值;
  使用“+”代替表单信息中的空格;
  使用“ &”分割表单中的不同元素 

posted @ 2014-07-10 14:19  w_s_xin  阅读(456)  评论(0编辑  收藏  举报