php 实现 js escape unescape

来源:互联网 发布:电信4g网络 怎样设置 编辑:程序博客网 时间:2024/05/02 06:09

在 ajax 异步处理数据的时候,中文很容易出来乱码,所以就要用到 php 实现的 javascript escape 和 unescape 来避免中文出现乱码。

 

在网上找了好多,关于 javascript 的 escape 和 unescape,有很多都不是很理想

 

兼容 linux 系统的很少,找了几个好的,有的作了部份修改,现在发出来和大家分享一下

 

    /* 解码 js 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") {
                $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) == "&#x") {
                $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<$sublen;$i++){
            if(ord($str[$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;
    }

原创粉丝点击