如何使用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 相关文章推荐
Php+SqlServer实现分页显示
Oct 09 PHP
如何在PHP中使用Oracle数据库(5)
Oct 09 PHP
PHP4和PHP5性能测试和对比 测试代码与环境
Aug 17 PHP
PHP中ADODB类详解
Mar 25 PHP
php 多个submit提交表单 处理方法
Jul 07 PHP
PHP 显示客户端IP与服务器IP的代码
Oct 12 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
PHP常用开发函数解析之数组篇[未完结]
Jul 30 PHP
Linux环境下搭建php开发环境的操作步骤
Jun 17 PHP
php实现的返回数据格式化类实例
Sep 22 PHP
PHP关联数组实现根据元素值删除元素的方法
Jun 26 PHP
PHP排序算法之希尔排序(Shell Sort)实例分析
Apr 20 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生成缩略图的代码
2011/01/12 PHP
php calender(日历)二个版本代码示例(解决2038问题)
2013/12/24 PHP
PHP设计模式之迭代器模式
2016/06/17 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
2016/10/13 PHP
PHP实现一维数组与二维数组去重功能示例
2018/05/24 PHP
javascript学习笔记(二十) 获得和设置元素的特性(属性)
2012/06/20 Javascript
Jquery自定义button按钮的几种方法
2014/06/11 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
jQuery Validate初步体验(二)
2015/12/12 Javascript
AngularJS 执行流程详细介绍
2016/08/18 Javascript
ajax级联菜单实现方法实例分析
2016/11/28 Javascript
基于JQuery实现的跑马灯效果(文字无缝向上翻动)
2016/12/02 Javascript
js生成随机数方法和实例
2017/01/17 Javascript
JS实现的DOM插入节点操作示例
2018/04/04 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
vue elementui el-form rules动态验证的实例代码详解
2019/05/23 Javascript
JavaScript常用8种数组去重代码实例
2020/09/09 Javascript
Python装饰器的函数式编程详解
2015/02/27 Python
python清除指定目录内所有文件中script的方法
2015/06/30 Python
Python中的字符串操作和编码Unicode详解
2017/01/18 Python
python实现坦克大战
2020/04/24 Python
pycharm2020.1.2永久破解激活教程,实测有效
2020/10/29 Python
台湾网购生鲜第一品牌:i3Fresh爱上新鲜
2017/10/26 全球购物
中专毕业个人的自荐信格式
2013/09/21 职场文书
简单而又朴实的个人求职信分享
2013/12/12 职场文书
高中毕业生自我鉴定例文
2013/12/29 职场文书
捐赠仪式主持词
2014/03/19 职场文书
土建技术员岗位职责
2015/04/11 职场文书
党员承诺书格式范文
2015/04/28 职场文书
刑事附带民事起诉状
2015/05/19 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书
小学生纪律委员竞选稿
2015/11/19 职场文书
入伍志愿书怎么写?
2019/07/19 职场文书
Python机器学习之决策树和随机森林
2021/07/15 Javascript
Javascript设计模式之原型模式详细
2021/10/05 Javascript
Win11安全功能升级:内置防网络钓鱼功能
2022/04/08 数码科技