如何使用PHP实现javascript的escape和unescape函数


Posted in PHP onJune 29, 2013

前端开发工程师都知道javascript有编码函数escape()和对应的解码函数unescape(),而php中只有个urlencode和urldecode,这个编码和解码函数对encodeURI和encodeURIComponent有效,但是对escape的是无效的。
javascript中的escape()函数和unescape()函数用户字符串编码,类似于PHP中的urlencode()函数,下面是php实现的escape函数代码:

/** 
 * js escape php 实现 
 * @param $string           the sting want to be escaped 
 * @param $in_encoding       
 * @param $out_encoding      
 */ 
function escape($string, $in_encoding = 'UTF-8',$out_encoding = 'UCS-2') { 
    $return = ''; 
    if (function_exists('mb_get_info')) { 
        for($x = 0; $x < mb_strlen ( $string, $in_encoding ); $x ++) { 
            $str = mb_substr ( $string, $x, 1, $in_encoding ); 
            if (strlen ( $str ) > 1) { // 多字节字符 
                $return .= '%u' . strtoupper ( bin2hex ( mb_convert_encoding ( $str, $out_encoding, $in_encoding ) ) ); 
            } else { 
                $return .= '%' . strtoupper ( bin2hex ( $str ) ); 
            } 
        } 
    } 
    return $return; 
}

对应的解码php unescape代码是:
function unescape($str) 
{ 
    $ret = ''; 
    $len = strlen($str); 
    for ($i = 0; $i < $len; $i ++) 
    { 
        if ($str[$i] == '%' && $str[$i + 1] == 'u') 
        { 
            $val = hexdec(substr($str, $i + 2, 4)); 
            if ($val < 0x7f) 
                $ret .= chr($val); 
            else  
                if ($val < 0x800) 
                    $ret .= chr(0xc0 | ($val >> 6)) . 
                     chr(0x80 | ($val & 0x3f)); 
                else 
                    $ret .= chr(0xe0 | ($val >> 12)) . 
                     chr(0x80 | (($val >> 6) & 0x3f)) . 
                     chr(0x80 | ($val & 0x3f)); 
            $i += 5; 
        } else  
            if ($str[$i] == '%') 
            { 
                $ret .= urldecode(substr($str, $i, 3)); 
                $i += 2; 
            } else 
                $ret .= $str[$i]; 
    } 
    return $ret; 
}

PHP 相关文章推荐
wiki-shan写的php在线加密的解密程序
Sep 07 PHP
IIS php环境配置PHP5 MySQL5 ZendOptimizer phpmyadmin安装与配置
Nov 18 PHP
php如何解决无法上传大于8M的文件问题
Mar 10 PHP
ThinkPHP使用心得分享-上传类UploadFile的使用
May 15 PHP
PHP图片等比例缩放生成缩略图函数分享
Jun 10 PHP
PHP+MYSQL会员系统的开发实例教程
Aug 23 PHP
php实现检查文章是否被百度收录
Jan 27 PHP
微信公众平台开发实现2048游戏的方法
Apr 15 PHP
PHP转换文本框内容为HTML格式的方法
Jul 20 PHP
详解PHP中websocket的使用方法
Sep 15 PHP
php字符串截取函数mb_substr用法实例分析
Jun 25 PHP
PHP pthreads v3下同步处理synchronized用法示例
Feb 21 PHP
解析php中的escape函数
Jun 29 #PHP
使用PHP会话(Session)实现用户登陆功能
Jun 29 #PHP
php获取数组中重复数据的两种方法
Jun 28 #PHP
php setcookie(name, value, expires, path, domain, secure) 参数详解
Jun 28 #PHP
关于url地址传参数时字符串有回车造成页面脚本赋值失败的解决方法
Jun 28 #PHP
使用PHP实现Mysql读写分离
Jun 28 #PHP
win7下memCache的安装过程(具体操作步骤)
Jun 28 #PHP
You might like
PHP 5.0对象模型深度探索之类的静态成员
2008/03/27 PHP
深入PHP运行环境配置的详解
2013/06/04 PHP
php获取数组长度的方法(有实例)
2013/10/27 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
php中错误处理操作实例分析
2019/08/23 PHP
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
node.js中的fs.write方法使用说明
2014/12/15 Javascript
基于JS2Image实现圣诞树代码
2015/12/24 Javascript
JavaScript实现分页效果
2017/03/28 Javascript
JavaScript脚本语言是什么_动力节点Java学院整理
2017/06/26 Javascript
angular.js中解决跨域问题的三种方式
2017/07/12 Javascript
javascript Function函数理解与实战
2017/12/01 Javascript
jquery自定义显示消息数量
2017/12/19 jQuery
详解基于Node.js的HTTP/2 Server实践
2018/05/31 Javascript
原生JS实现的简单小钟表功能示例
2018/08/30 Javascript
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
[52:15]2014 DOTA2国际邀请赛中国区预选赛5.21 HGT VS LGD-GAMING
2014/05/23 DOTA
Python中MySQLdb和torndb模块对MySQL的断连问题处理
2015/11/09 Python
python中nan与inf转为特定数字方法示例
2017/05/11 Python
Python装饰器实现几类验证功能做法实例
2017/05/18 Python
python批量从es取数据的方法(文档数超过10000)
2018/12/27 Python
Pycharm之快速定位到某行快捷键的方法
2019/01/20 Python
如何在Django中添加没有微秒的 DateTimeField 属性详解
2019/01/30 Python
pyqt5实现登录界面的模板
2020/05/30 Python
Django+zTree构建组织架构树的方法
2019/08/21 Python
python retrying模块的使用方法详解
2019/09/25 Python
Python性能分析工具py-spy原理用法解析
2020/07/27 Python
Python 实现PS滤镜中的径向模糊特效
2020/12/03 Python
使用Python制作一个数据预处理小工具(多种操作一键完成)
2021/02/07 Python
X/HTML5 和 XHTML2
2008/10/17 HTML / CSS
美国玛丽莎收藏奢华时尚商店:Marissa Collections
2016/11/21 全球购物
环境科学专业研究生求职信
2013/10/02 职场文书
小学生母亲节演讲稿
2014/05/07 职场文书
证券区域经理岗位职责
2015/04/10 职场文书
工作表现证明
2015/06/15 职场文书
2015年汽车销售员工作总结
2015/07/24 职场文书