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设计模式 Builder(建造者模式)
Jun 26 PHP
php设计模式之命令模式的应用详解
May 21 PHP
基于php iconv函数的使用详解
Jun 09 PHP
PHP 清空varnish 缓存的详解(包括指定站点下的)
Jun 20 PHP
PHP实现克鲁斯卡尔算法实例解析
Aug 22 PHP
php命令行用法入门实例教程
Oct 27 PHP
php站内搜索关键词变亮的实现方法
Dec 30 PHP
php读取csv数据保存到数组的方法
Jan 03 PHP
smarty自定义函数htmlcheckboxes用法实例
Jan 22 PHP
PHP中in_array函数使用的问题与解决办法
Sep 11 PHP
利用PHP获取汉字首字母并且分组排序详解
Oct 22 PHP
Laravel基础_关于view共享数据的示例讲解
Oct 14 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加速缓存器opcache,apc,xcache,eAccelerator原理与配置方法实例分析
2020/03/02 PHP
PHP copy函数使用案例代码解析
2020/09/01 PHP
基于Jquery的温度计动画效果
2010/06/18 Javascript
jQuery UI Dialog 创建友好的弹出对话框实现代码
2012/04/12 Javascript
Java/JS获取flash高宽的具体方法
2013/12/27 Javascript
禁止IE用右键的JS代码
2013/12/30 Javascript
JS实现双击编辑可修改状态的方法
2015/08/14 Javascript
JS实现浏览器状态栏显示时间的方法
2015/10/27 Javascript
整理Javascript数组学习笔记
2015/11/29 Javascript
Vue.js 2.0 和 React、Augular等其他前端框架大比拼
2016/10/08 Javascript
微信公众号  提示:Unauthorized API function 问题解决方法
2016/12/05 Javascript
javascript将url解析为json格式的两种方法
2017/08/18 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
微信小程序商品详情页的底部弹出框效果
2020/11/16 Javascript
jQuery实现的简单对话框拖动功能示例
2018/06/05 jQuery
JS实现的全选、全不选及反选功能【案例】
2019/02/19 Javascript
vue-drag-chart 拖动/缩放图表组件的实例代码
2020/04/10 Javascript
JavaScript ECMA-262-3 深入解析(一):执行上下文实例分析
2020/04/25 Javascript
JavaScript实现打字游戏
2021/02/19 Javascript
python学习笔记之列表(list)与元组(tuple)详解
2017/11/23 Python
python实现基于信息增益的决策树归纳
2018/12/18 Python
python制作简单五子棋游戏
2019/06/18 Python
在python中利用numpy求解多项式以及多项式拟合的方法
2019/07/03 Python
Python 解析pymysql模块操作数据库的方法
2020/02/18 Python
django model通过字典更新数据实例
2020/04/01 Python
anaconda3安装及jupyter环境配置全教程
2020/08/24 Python
CSS3圆角边框和边界图片效果实例
2016/07/01 HTML / CSS
HTML5 声明兼容IE的写法
2011/05/16 HTML / CSS
英国名牌服装购物网站:OD’s Designer
2019/09/02 全球购物
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
Ado与Ado.net的相同与不同
2014/12/08 面试题
西北政法大学自主招生自荐信
2014/01/29 职场文书
餐厅执行经理岗位职责范本
2014/02/26 职场文书
美术指导求职信
2014/03/17 职场文书
农业项目合作意向书
2015/05/08 职场文书
Java死锁的排查
2022/05/11 Java/Android