jquery .post .get中文参数乱码解决方法详解

aliyun阿里云服务器

jquery默认的编码为utf-8,做项目时有时处于项目需要用到ajax提交中文参数,乱码问题就很头疼了,折腾了许久终于弄出来了。为了便于传输,我们首先将需要用到的参数用javascript自带的函数escape加密,然后在php端口用unescape函数解密即可,当然php默认是没有unescape这个函数的,这就得自己弄了,现将代码分享给大家:

javascript端直接用函数即可。

定义和用法

escape() 函数可对字符串进行编码,这样就可以在所有的计算机上读取该字符串。

语法

escape(string)

返回值

已编码的 string 的副本。其中某些字符被替换成了十六进制的转义序列。

说明

该方法不会对 ASCII 字母和数字进行编码,也不会对下面这些 ASCII 标点符号进行编码: * @ - _ + . / 。其他所有的字符都会被转义序列替换。

提示和注释

提示:可以使用 unescape() 对 escape() 编码的字符串进行解码。

注释:ECMAScript v3 反对使用该方法,应用使用 decodeURI() 和 decodeURIComponent() 替代它。

php端的unescape原型:

/**
 * @desc javascript escape解密
 * @author mengdj<mengdj@outlook.com>
 */
if(!function_exists("unescape")){
	function unescape($str) {
	 $str = rawurldecode($str);
	 preg_match_all("/%u.{4}|&#x.{4};|&#d+;|.+/U",$str,$r);
	 $ar = $r[0];
	 foreach($ar as $k=>$v){
	  if(substr($v,0,2) == "%u")
	   $ar[$k] = mb_convert_encoding(pack("H4",substr($v,-4)),"gb2312","UCS-2");
	  elseif(substr($v,0,3) == "&#x")
	   $ar[$k] = mb_convert_encoding(pack("H4",substr($v,3,-1)),"gb2312","UCS-2");
	  elseif(substr($v,0,2) == "&#") {
	   $ar[$k] = mb_convert_encoding(pack("H4",substr($v,2,-1)),"gb2312","UCS-2");
	  }
	 }
	 return join("",$ar);
	}
}

 本文出自:http://www.cnblogs.com/mengdejun/p/jquery_php_post_get_unescape_escape.html 转载请保留来源和作者信息。

posted @ 2013-11-20 18:24  小孟文摘  阅读(1800)  评论(0编辑  收藏  举报