如何使用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 相关文章推荐
PHPShop存在多个安全漏洞
Oct 09 PHP
PHP详细彻底学习Smarty
Mar 27 PHP
php连接mysql数据库代码
Mar 10 PHP
PHP 八种基本的数据类型小结
Jun 01 PHP
php新建文件自动编号的思路与实现
Jun 27 PHP
fetchAll()与mysql_fetch_array()的区别详解
Jun 05 PHP
ubuntu12.04使用c编写php扩展模块教程分享
Dec 25 PHP
详解php中的implements 使用
Jun 13 PHP
php多文件打包下载的实例代码
Jul 12 PHP
php识别翻转iphone拍摄的颠倒图片
May 17 PHP
php快速导入大量数据的实例方法
Sep 23 PHP
laravel框架实现为 Blade 模板引擎添加新文件扩展名操作示例
Jan 25 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之规范编程命名小结
2013/05/15 PHP
JScript的条件编译
2007/05/29 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
javascript比较两个日期相差天数的方法
2015/07/23 Javascript
《JavaScript函数式编程》读后感
2015/08/07 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
jQuery简单自定义图片轮播插件及用法示例
2016/11/21 Javascript
详解Javascript中DOM的范围
2017/02/13 Javascript
BootStrap中的Fontawesome 图标
2017/05/25 Javascript
使用JavaScript实现一个小程序之99乘法表
2017/09/21 Javascript
BootStrap TreeView使用实例详解
2017/11/01 Javascript
React手稿之 React-Saga的详解
2018/11/12 Javascript
跨域解决之JSONP和CORS的详细介绍
2018/11/21 Javascript
JavaScript文本特效实例小结【3个示例】
2018/12/22 Javascript
原生JS运动实现轮播图
2021/01/02 Javascript
python实现k均值算法示例(k均值聚类算法)
2014/03/16 Python
Python实现将多个空格换为一个空格.md的方法
2018/12/20 Python
django的settings中设置中文支持的实现
2019/04/28 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
2019/11/07 Python
python 画函数曲线示例
2019/12/04 Python
python palywright库基本使用
2021/01/21 Python
CSS3实现简易版的刮刮乐效果
2016/09/27 HTML / CSS
佐卡伊官网:中国知名珠宝品牌
2017/02/05 全球购物
Jacadi Paris美国官方网站:法国童装品牌
2017/10/15 全球购物
英国游戏机和游戏购物网站:365games.co.uk
2018/06/18 全球购物
类、抽象类、接口的差异
2016/06/13 面试题
工艺工程师工作职责
2013/11/23 职场文书
学生感冒英文请假条
2014/02/04 职场文书
预备党员综合考察材料
2014/05/31 职场文书
自我查摆剖析材料
2014/10/11 职场文书
呐喊读书笔记
2015/06/30 职场文书
辞职报告(范文三篇)
2019/08/27 职场文书
读《解忧杂货店》有感:请相信一切都是最好的安排
2019/11/07 职场文书
vue 实现上传组件
2021/05/31 Vue.js
如何理解及使用Python闭包
2021/06/01 Python
Win11 引入 Windows 365 云操作系统,适应疫情期间混合办公模式:启动时直接登录、模
2022/04/06 数码科技