• 技术文章 >后端开发 >php教程

    PHP实现Javascript中的escape及unescape函数代码分享_php实例

    2016-06-07 17:14:09原创391

    这个类相当好用.作用么,PHP做JSON传递GBK字符,比如中文,日文,韩文神马的Unicode最合适不过了..

    <?php
    classcoding
    {
      //模仿JAVASCRIPT的ESCAPE和UNESCAPE函数的功能 
      functionunescape($str)
      {
        $text=preg_replace_callback("/%u[0-9A-Za-z]{4}/",array(
          &$this,
          'toUtf8'
        ),$str);
        returnmb_convert_encoding($text,"gb2312","utf-8");
      }
      
      functiontoUtf8($ar)
      {
        foreach($aras$val){
          $val=intval(substr($val,2),16);
          if($val<0x7F){// 0000-007F 
            $c.=chr($val);
          }elseif($val<0x800){// 0080-0800 
            $c.=chr(0xC0|($val/64));
            $c.=chr(0x80|($val%64));
          }else{// 0800-FFFF 
            $c.=chr(0xE0|(($val/64)/64));
            $c.=chr(0x80|(($val/64)%64));
            $c.=chr(0x80|($val%64));
          }
        }
        return$c;
      }
      
      functionescape($string,$encoding='gb2312')
      {
        $return='';
        for($x=0;$x1){// 多字节字符 
            $return.='%u'.strtoupper(bin2hex(mb_convert_encoding($str,'UCS-2',$encoding)));
          }else{
            $return.='%'.strtoupper(bin2hex($str));
          }
        }
        return$return;
      }
      
      functiongb2utf8($string,$encoding='utf-8',$from_encode='gb2312')
      {
        returnmb_convert_encoding($string,$encoding,$from_encode);
      }
      
    }
    ?>
    

    google code 上找到的另外一个类似脚本

    <?php
     
        functionphpescape($str)
        {
            $sublen=strlen($str);
            $retrunString="";
            for($i=0;$i<$sublen;$i++)
            {
                if(ord($str[$i])>=127)
                {
                    $tmpString=bin2hex(iconv("gbk","ucs-2",substr($str,$i,2)));
                    $tmpString=substr($tmpString,2,2).substr($tmpString,0,2);
                    $retrunString.="%u".$tmpString;
                    $i++;
                }else{
                    $retrunString.="%".dechex(ord($str[$i]));
                }
            }
            return$retrunString;
        }
     
     
        functionescape($str)
        {
            preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);
            $ar=$r[0];
            foreach($aras$k=>$v)
            {
                if(ord($v[0])<128)
                    $ar[$k]=rawurlencode($v);
                else
                    $ar[$k]="%u".bin2hex(iconv("UTF-8","UCS-2",$v));
            }
            returnjoin("",$ar);
        }
     
        functionphpunescape($source)
        {
            $decodedStr="";
            $pos=0;
            $len=strlen($source);
            
            while($pos<$len)
            {
                $charAt=substr($source,$pos,1);
                if($charAt=='%')
                {
                    $pos++;
                    $charAt=substr($source,$pos,1);
                    if($charAt=='u')
                    {
                        // we got a unicode character 
                        $pos++;
                        $unicodeHexVal=substr($source,$pos,4);
                        $unicode=hexdec($unicodeHexVal);
                        $entity="&#".$unicode.';';
                        $decodedStr.=utf8_encode($entity);
                        $pos+=4;
                    }else{
                        // we have an escaped ascii character 
                        $hexVal=substr($source,$pos,2);
                        $decodedStr.=chr(hexdec($hexVal));
                        $pos+=2;
                    }
                }else{
                    $decodedStr.=$charAt;
                    $pos++;
                }
            }
            return$decodedStr;
        }
        
        
        functionunescape($str)
        {
            $str=rawurldecode($str);
            preg_match_all("/(?:%u.{4})|&#x.{4};|&#\d+;|.+/U",$str,$r);
            $ar=$r[0];
            #print_r($ar);
            foreach($aras$k=>$v)
            {
                if(substr($v,0,2)=="%u")
                    $ar[$k]=iconv("UCS-2","UTF-8",pack("H4",substr($v,-4)));
                elseif(substr($v,0,3)=="&#x")
                    $ar[$k]=iconv("UCS-2","UTF-8",pack("H4",substr($v,3,-1)));
                elseif(substr($v,0,2)=="&#")
                {
                    //echo substr($v,2,-1)."";
                    $ar[$k]=iconv("UCS-2","UTF-8",pack("n",substr($v,2,-1)));
                }
            }
            returnjoin("",$ar);
        }
     
    ?>
    

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    上一篇:php include类文件超时问题处理_php实例 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 分享PHP函数使用小工具(附代码示例)• PHP安全编码总结(经验分享)• 非常全面!PHP常见漏洞代码总结!• 一文详解PHP实现职责链设计模式(附代码示例)• php实现通过JSON RPC与go通讯(附代码)
    1/1

    PHP中文网