如何使用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中的正则表达式以及模式匹配
Jun 19 PHP
mac下安装nginx和php
Nov 04 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
windows的文件系统机制引发的PHP路径爆破问题分析
Jul 28 PHP
php实现的返回数据格式化类实例
Sep 22 PHP
使用图灵api创建微信聊天机器人
Jul 23 PHP
php实现计算百度地图坐标之间距离的方法
May 05 PHP
PHP Callable强制指定回调类型的方法
Aug 30 PHP
windows下的WAMP环境搭建图文教程(推荐)
Jul 27 PHP
PHP正则匹配到2个字符串之间的内容方法
Dec 24 PHP
PDO::getAvailableDrivers讲解
Jan 28 PHP
thinkphp3.2同时连接两个数据库的简单方法
Aug 13 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修改xml文档内容的方法
2015/01/23 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
js实现上传图片之上传前预览图片
2013/03/25 Javascript
网站如何做到完全不需要jQuery也可以满足简单需求
2013/06/27 Javascript
JS实现在网页中弹出一个输入框的方法
2015/03/03 Javascript
原生Js实现简易烟花爆炸效果的方法
2015/03/20 Javascript
Angular 路由route实例代码
2016/07/12 Javascript
JavaScript自定义分页样式
2017/01/17 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
JS逻辑运算符短路操作实例分析
2018/07/09 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
vue-resourc发起异步请求的方法
2020/02/11 Javascript
如何在Vue中使localStorage具有响应式(思想实验)
2020/07/14 Javascript
[01:24:09]Ti4 冒泡赛第二轮DK vs C9 1
2014/07/14 DOTA
[05:36]DOTA2 2015国际邀请赛中国区预选赛第四日TOP10
2015/05/29 DOTA
[01:00:14]DOTA2-DPC中国联赛 正赛 Ehome vs Elephant BO3 第二场 2月28日
2021/03/11 DOTA
实用自动化运维Python脚本分享
2018/06/04 Python
selenium+python自动化测试之鼠标和键盘事件
2019/01/23 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
Python列表与元组的异同详解
2019/07/02 Python
解决python flask中config配置管理的问题
2019/07/26 Python
Python线程障碍对象Barrier原理详解
2019/12/02 Python
Python 动态变量名定义与调用方法
2020/02/09 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
python网络编程socket实现服务端、客户端操作详解
2020/03/24 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
Python reques接口测试框架实现代码
2020/07/28 Python
BabyBjörn婴儿背带法国官网:BabyBjorn法国
2018/06/16 全球购物
装修五一活动策划案
2014/01/23 职场文书
CAD制图人员的自荐信
2014/02/07 职场文书
先进集体获奖感言
2014/02/13 职场文书
红色故事演讲稿
2014/05/22 职场文书
精神文明建设标语
2014/06/16 职场文书
研究生求职自荐书
2014/06/23 职场文书
工程部岗位职责
2015/02/10 职场文书
小学五年级(说明文3篇)
2019/08/13 职场文书