`
hubin4
  • 浏览: 93252 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

中文传值乱码问题

    博客分类:
  • AJAX
阅读更多

URL编码很混乱

 

1.直接在网址栏输,网址路径中包含汉字,"www.xx.com/ff/问答",

"问答"将用的是utf-8编码.

 

2.直接在网址栏输,网址种的参数部分有汉字,"www.xx.com/ff/info.php?name=苏州",

"苏州"用的是操作系统的'默认编码'编码.据说可以在浏览器里设置这个编码.

 

3.在网页上点submit按钮,GET或者POST提交,按照网页编码格式编码,下面是U8编码

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>

 

4.用AJAX提交,有的浏览器是U8,有的是取系统默认编码.

 

5.其他乱七八糟的....

 

解决办法

无任系统是什么,无任浏览器是什么,无任网页编码是什么

用Javascript的encodeURI()方法编码,就都变为unicode编码.

[encodeURI()的JS解码函数是decodeURI()]

 

客户端:两次JS

encodeURI(encodeURI($("#userName").val()));

服务端:一次解码

Java: String name = URLDecoder.decode(old,"UTF-8");

php: urldecode ("%E8%83%A1%E6%96%8C");

 

原理:

url只可以传ASCII码里的字符,其他字符过不了,先要变%XX才可以通过.

比如:"胡斌"要变"%E8%83%A1%E6%96%8C"[u8编码]才可以通过.

这里最最重要的是:E8-83-A1这U8编码的结构非常重要,因为你知道这是U8,

为了不破坏这个结构,再URL编码一下,变:

%25E8%2583%25A1%25E6%2596%258C

可以看到,只有"%"再次变"%25",E8-83-A1这个你知道的U8编码结构依然还在.

然后:%25E8%2583%25A1%25E6%2596%258C到了服务器,

服务器根据规定[通过的肯定是URL编码过的,然后检查有没有类似"%XX"的东西,

看见"%XX"此类的东西,服务器帮着还原了,注意'%'后仅仅是两个X]

%25E8%2583%25A1%25E6%2596%258C还原成%E8%83%A1%E6%96%8C,

就是说服务器以为你传的参数就是"%E8%83%A1%E6%96%8C",

但是你知道,"%E8%83%A1%E6%96%8C"确实是你要的参数,只不过你编码过了,

而且你也知道这个是U8编码结构,所以你再用U8反编一次就可以了.

 

你也可以这么记:

服务器这么"吃"数据,只能吃"一个字母"或者"%XX"这两种格式.其他吃不下.

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics