如何使用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执行linux系统命令的常用函数使用说明
Apr 27 PHP
php下统计用户在线时间的一种尝试
Aug 26 PHP
Windows下利用Gvim写PHP产生中文乱码问题解决方法
Apr 20 PHP
PHP中使用mktime获取时间戳的一个黑色幽默分析
May 31 PHP
基于PHP Socket配置以及实例的详细介绍
Jun 13 PHP
简单实用的网站PHP缓存类实例
Jul 18 PHP
Symfony2框架学习笔记之HTTP Cache用法详解
Mar 18 PHP
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
Mar 30 PHP
今天你说520了吗?不仅有php表白书还有java表白神器
May 20 PHP
解决Laravel 使用insert插入数据,字段created_at为0000的问题
Oct 11 PHP
PHP 扩展Memcached命令用法实例总结
Jun 04 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的FTP学习(一)
2006/10/09 PHP
分享五个PHP7性能优化提升技巧
2015/12/07 PHP
php断点续传之文件分割合并详解
2016/12/13 PHP
php实现微信公众平台发红包功能
2018/06/14 PHP
js获取form的方法
2015/05/06 Javascript
JavaScript中各种引用类型的常用操作方法小结
2016/05/05 Javascript
jQuery实现手机版页面翻页效果的简单实例
2016/10/05 Javascript
详解通过JSON数据使用VUE.JS
2017/05/26 Javascript
react-redux中connect()方法详细解析
2017/05/27 Javascript
基于three.js编写的一个项目类示例代码
2018/01/05 Javascript
JS实现点击下拉菜单把选择的内容同步到input输入框内的实例
2018/01/23 Javascript
微信小程序实现折叠面板
2018/01/31 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
微信小程序动态增加按钮组件
2018/09/14 Javascript
详解js访问对象的属性和方法
2018/10/25 Javascript
详解关于JSON.parse()和JSON.stringify()的性能小测试
2019/03/14 Javascript
vue使用echarts画组织结构图
2021/02/06 Vue.js
Python打印斐波拉契数列实例
2015/07/07 Python
Python实现复杂对象转JSON的方法示例
2017/06/22 Python
简单的python协同过滤程序实例代码
2018/01/31 Python
实例分析python3实现并发访问水平切分表
2018/09/29 Python
Python中的asyncio代码详解
2019/06/10 Python
Python字符串的一些操作方法总结
2019/06/10 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
python复合条件下的字典排序
2020/12/18 Python
Spy++的使用方法及下载教程
2021/01/29 Python
FOREO官方网站:LUNA露娜洁面仪
2016/11/28 全球购物
Stührling手表官方网站:男女高品质时尚手表的领先零售商
2021/01/07 全球购物
服务标兵事迹材料
2014/05/04 职场文书
颂军魂爱军营演讲稿
2014/09/13 职场文书
财务部岗位职责
2015/02/03 职场文书
大学生村官工作总结2015
2015/04/09 职场文书
百年校庆宣传标语口号
2015/12/26 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
SQL Server中搜索特定的对象
2022/05/25 SQL Server