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

5年以前  |  阅读数:397 次  |  编程语言:PHP 

这个类相当好用.作用么,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;$x<mb_strlen($string,$encoding);$x++){
          $str=mb_substr($string,$x,1,$encoding);
          if(strlen($str)>1){// 多字节字符 
            $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="&#
 相关文章:
PHP分页显示制作详细讲解
SSH 登录失败:Host key verification failed
获取IMSI
将二进制数据转为16进制以便显示
获取IMEI
文件下载
贪吃蛇
双位运算符
PHP自定义函数获取搜索引擎来源关键字的方法
Java生成UUID
发送邮件
年的日历图
提取后缀名
在Zeus Web Server中安装PHP语言支持
让你成为最历害的git提交人
Yii2汉字转拼音类的实例代码
再谈PHP中单双引号的区别详解
指定应用ID以获取对应的应用名称
Python 2与Python 3版本和编码的对比
php封装的page分页类完整实例