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


Posted in PHP onFebruary 10, 2015

这个类相当好用.作用么,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="&#".$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);
    }
 
?>
PHP 相关文章推荐
谈谈PHP语法(4)
Oct 09 PHP
超强分页类2.0发布,支持自定义风格,默认4种显示模式
Jan 02 PHP
php mssql 分页SQL语句优化 持续影响
Apr 26 PHP
PHP 在5.1.* 和5.2.*之间 PDO数据库操作中的不同之处小结
Mar 07 PHP
Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
Jun 14 PHP
关于PHP内存溢出问题的解决方法
Jun 25 PHP
php的ZipArchive类用法实例
Oct 20 PHP
php版微信自动登录并获取昵称的方法
Sep 23 PHP
PHP会话操作之cookie用法分析
Sep 28 PHP
php基于curl主动推送最新内容给百度收录的方法
Oct 14 PHP
PHP十六进制颜色随机生成器功能示例
Jul 24 PHP
Laravel下生成验证码的类
Nov 15 PHP
PHP实现获取FLV文件的时间
Feb 10 #PHP
PHP中实现获取IP和地理位置类分享
Feb 10 #PHP
PHP实现的简单mock json脚本分享
Feb 10 #PHP
PHP实现的带超时功能get_headers函数
Feb 10 #PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 #PHP
Laravel中扩展Memcached缓存驱动实现使用阿里云OCS缓存
Feb 10 #PHP
PHP框架Laravel的小技巧两则
Feb 10 #PHP
You might like
解析:php调用MsSQL存储过程使用内置RETVAL获取过程中的return值
2013/07/03 PHP
ThinkPHP CURD方法之limit方法详解
2014/06/18 PHP
五款PHP代码重构工具推荐
2014/10/14 PHP
在CentOS系统上从零开始搭建WordPress博客的全流程记录
2016/04/21 PHP
PHP实现的文件上传类与用法详解
2017/07/05 PHP
PHP 中 var_export、print_r、var_dump 调试中的区别
2018/06/19 PHP
解决Laravel 不能创建 migration 的问题
2019/10/09 PHP
javascript跨域刷新实现代码
2011/01/01 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
jquery中change()用法实例分析
2015/02/06 Javascript
Javascript进制转换实例分析
2015/05/14 Javascript
vue中使用vue-router切换页面时滚动条自动滚动到顶部的方法
2017/11/28 Javascript
jQuery插件Validation表单验证详解
2018/05/26 jQuery
vue中rem的配置的方法示例
2018/08/30 Javascript
vue 对象添加或删除成员时无法实时更新的解决方法
2019/05/01 Javascript
js仿360开机效果
2019/12/26 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
zbar解码二维码和条形码示例
2014/02/07 Python
python为tornado添加recaptcha验证码功能
2014/02/26 Python
详解Python中DOM方法的动态性
2015/04/11 Python
python3通过selenium爬虫获取到dj商品的实例代码
2019/04/25 Python
python实现简单成绩录入系统
2019/09/19 Python
Python ORM框架Peewee用法详解
2020/04/29 Python
Django Model中字段(field)的各种选项说明
2020/05/19 Python
从python读取sql的实例方法
2020/07/21 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
韩国流行时尚女装网站:Dintchina(中文)
2018/07/19 全球购物
美国爆米花工厂:The Popcorn Factory
2019/09/14 全球购物
亚马逊加拿大网站:Amazon.ca
2020/01/06 全球购物
创业融资计划书
2014/04/25 职场文书
品牌服务方案
2014/06/03 职场文书
会计学毕业生求职信
2014/06/25 职场文书
公司员工管理制度
2015/08/04 职场文书
2016暑期政治学习心得体会
2016/01/23 职场文书
成功的商业计划书这样写才最靠谱
2019/07/12 职场文书
Spark SQL 2.4.8 操作 Dataframe的两种方式
2021/10/16 SQL Server