在 ajax 异步处理数据的时候,中文很容易出来乱码,所以就要用到 php 实现的 javascript escape 和 unescape 来避免中文出现乱码。
在网上找了好多,关于 javascript 的 escape 和 unescape,有很多都不是很理想
兼容 linux 系统的很少,找了几个好的,有的作了部份修改,现在发出来和大家分享一下
/* 解码 js unescape() */ function unescape($str) { $str = rawurldecode($str); preg_match_all("/%u.{4}|.{4};|d+;|.+/U",$str,$r); $ar = $r[0]; foreach($ar as $k => $v) { if(substr($v,0,2) == "%u") { $restr = substr($v, -4); if (!eregi("WIN", PHP_OS)){ $restr=substr($restr, 2, 2).substr($restr, 0, 2); } $ar[$k] = iconv("UCS-2", $this->encode, pack("H4", $restr)); } elseif (substr($v, 0, 3) == "") { $ar[$k] = iconv("UCS-2", $this->encode, pack("H4",substr($v,3,-1))); } elseif(substr($v, 0, 2) == "") { $ar[$k] = iconv("UCS-2", $this->encode, pack("n",substr($v,2,-1))); } } return join('',$ar); } /* 编码 js escape() */ function escape($str) { $sublen=strlen($str); $reString=""; for ($i=0;$i=127){ $tmpString=bin2hex(iconv($this->encode,"ucs-2",substr($str,$i,2))); //此处GBK为目标代码的编码格式,请实际情况修改 if (!eregi("WIN",PHP_OS)){ $tmpString=substr($tmpString,2,2).substr($tmpString,0,2); } $reString.="%u".$tmpString; $i++; } else { $reString.="%".dechex(ord($str[$i])); } } return $reString; }