如何使用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(6) 面向对象
Feb 16 PHP
.htaccess文件保护实例讲解
Feb 06 PHP
php获取服务器信息的实现代码
Feb 04 PHP
php过滤敏感词的示例
Mar 31 PHP
PHP实现的汉字拼音转换和公历农历转换类及使用示例
Jul 01 PHP
PHP中使用xmlreader读取xml数据示例
Dec 29 PHP
php单文件版在线代码编辑器
Mar 12 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
Apr 07 PHP
php文件上传你必须知道的几点
Oct 20 PHP
PHP数据库连接mysql与mysqli对比分析
Jan 04 PHP
深入浅析用PHP实现MVC
Mar 02 PHP
PHP实现将base64编码字符串转换成图片示例
Jun 22 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
中国收音机工业发展史
2021/03/02 无线电
使用PHP批量生成随机用户名
2008/07/10 PHP
使用phpQuery采集网页的方法
2013/11/13 PHP
php实现水仙花数示例分享
2014/04/03 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
初识PHP
2014/09/28 PHP
PHP把MSSQL数据导入到MYSQL的方法
2014/12/27 PHP
PHP实现简单实用的验证码类
2015/07/29 PHP
PHP未登录自动跳转到登录页面
2016/12/21 PHP
jquery调用asp.net 页面后台的实现代码
2011/04/27 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
如何将一个String和多个String值进行比较思路分析
2013/04/22 Javascript
JavaScript实现url地址自动检测并添加URL链接示例代码
2013/11/12 Javascript
javascript中with()方法的语法格式及使用
2014/08/04 Javascript
在JavaScript中操作时间之setYear()方法的使用
2015/06/12 Javascript
深入理解Node.js的HTTP模块
2016/10/12 Javascript
JavaScript触发onScroll事件的函数节流详解
2016/12/14 Javascript
QQ跳转支付宝并自动领红包脚本(最新)
2018/06/22 Javascript
JavaScript两种计时器的实例讲解
2019/01/31 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
原生js代码能实现call和bind吗
2019/07/31 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
Python生成数字图片代码分享
2017/10/31 Python
Python中asyncio与aiohttp入门教程
2018/10/16 Python
Python 窗体(tkinter)按钮 位置实例
2019/06/13 Python
英国巧克力贸易公司:Chocolate Trading Company
2017/03/21 全球购物
杭州SQL浙江浙大网新恩普软件有限公司
2013/07/27 面试题
请问软件开发中的设计模式你会使用哪些
2015/05/13 面试题
教师的实习自我鉴定
2013/12/17 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
计算机求职信
2014/07/02 职场文书
防灾减灾标语
2014/10/07 职场文书
2015年全国助残日活动方案
2015/05/04 职场文书
优秀党员主要事迹材料
2015/11/04 职场文书
素质教育学习心得体会
2016/01/19 职场文书
pycharm无法导入lxml的解决办法
2021/03/31 Python