如何使用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执行速度全攻略
Oct 09 PHP
一篇不错的PHP基础学习笔记
Mar 18 PHP
删除及到期域名的查看(抢域名必备哦)
May 14 PHP
使用PHP实现二分查找算法代码分享
Jun 24 PHP
php检测图片木马多进制编程实践
Apr 11 PHP
php根据生日计算年龄的方法
Jul 13 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
Dec 25 PHP
CI框架(CodeIgniter)操作redis的方法详解
Jan 25 PHP
购物车实现的几种方式优缺点对比
May 02 PHP
PHP工厂模式、单例模式与注册树模式实例详解
Jun 03 PHP
PHP大文件分块上传功能实例详解
Jul 22 PHP
PHP中的自动加载操作实现方法详解
Aug 06 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
2014过年倒计时示例
2014/01/31 PHP
PHP实现QQ空间自动回复说说的方法
2015/12/02 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
javascript getElementsByName()的用法说明
2009/07/31 Javascript
JavaScript的类型简单说明
2010/09/03 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
javascript检测两个数组是否相似
2015/05/19 Javascript
Javascript 6里的4个新语法
2016/08/25 Javascript
javascript 内置对象及常见API详细介绍
2016/11/01 Javascript
移动端日期插件Mobiscroll.js使用详解
2016/12/19 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
express如何使用session与cookie的方法
2018/01/30 Javascript
浅谈微信JS-SDK 微信分享接口开发(介绍版)
2018/08/15 Javascript
解决vue 项目引入字体图标报错、不显示等问题
2018/09/01 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
Vue中错误图片的处理的实现代码
2019/11/07 Javascript
[11:01]2014DOTA2西雅图邀请赛 冷冷带你探秘威斯汀
2014/07/08 DOTA
Python单链表的简单实现方法
2014/09/23 Python
Python读取键盘输入的2种方法
2015/06/16 Python
Python爬虫爬验证码实现功能详解
2016/04/14 Python
详解Python 序列化Serialize 和 反序列化Deserialize
2017/08/20 Python
详解Pycharm安装及Django安装配置指南
2020/09/15 Python
使用jquery实现HTML5响应式导航菜单教程
2014/04/02 HTML / CSS
欧缇丽英国官方网站:Caudalie英国
2016/08/17 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
大学自主招生自荐信范文
2014/02/26 职场文书
租房安全协议书
2014/08/20 职场文书
药店促销活动策划方案
2014/08/24 职场文书
学生实习证明范文
2014/09/28 职场文书
中班下学期幼儿评语
2014/12/30 职场文书
员工辞职信范文
2015/03/02 职场文书
2015年效能监察工作总结
2015/04/23 职场文书
2019学子的答谢词范本!
2019/07/05 职场文书
关于食品安全的演讲稿范文(三篇)
2019/10/21 职场文书
Django实现drf搜索过滤和排序过滤
2021/06/21 Python
Java实现多文件上传功能
2021/06/30 Java/Android