如何使用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 相关文章推荐
第五节 克隆 [5]
Oct 09 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
php获取网页中图片、DIV内容的简单方法
Jun 19 PHP
php curl请求信息和返回信息设置代码实例
Apr 27 PHP
理解PHP中的Session及对Session有效期的控制
Jan 08 PHP
在Laravel框架里实现发送邮件实例(邮箱验证)
May 20 PHP
php实现图片按比例截取的方法
Feb 06 PHP
Laravel 批量更新多条数据的示例
Nov 27 PHP
php+ajax实现无刷新文件上传功能(ajaxuploadfile)
Feb 11 PHP
PHP fprintf()函数用法讲解
Feb 16 PHP
YII框架模块化处理操作示例
Apr 26 PHP
Thinkphp 在api开发中异常返回依然是html的解决方式
Oct 16 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
全国FM电台频率大全 - 15 山东省
2020/03/11 无线电
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
PHP中字符安全过滤函数使用小结
2015/02/25 PHP
JQuery实现自定义对话框的代码
2008/06/15 Javascript
js 实现无干扰阴影效果 简单好用(附文件下载)
2009/12/27 Javascript
ajax 缓存 问题 requestheader
2010/08/01 Javascript
javascript 事件处理、鼠标拖动效果实现方法详解
2012/05/11 Javascript
jquery左右滚动焦点图banner图片鼠标经过显示上下页按钮
2013/10/11 Javascript
将json当数据库一样操作的javascript lib
2013/10/28 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
js中scrollTop()方法和scroll()方法用法示例
2016/10/03 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
nodejs实现的简单web服务器功能示例
2018/03/15 NodeJs
详解wepy开发小程序踩过的坑(小结)
2019/05/22 Javascript
vue elementUI table 自定义表头和行合并的实例代码
2019/05/22 Javascript
JS如何生成随机验证码
2020/03/02 Javascript
vue2.* element tabs tab-pane 动态加载组件操作
2020/07/19 Javascript
[53:18]Spirit vs Liquid Supermajor小组赛A组 BO3 第三场 6.2
2018/06/03 DOTA
用Python编写一个国际象棋AI程序
2014/11/28 Python
python中argparse模块用法实例详解
2015/06/03 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
Flask框架搭建虚拟环境的步骤分析
2019/12/21 Python
Python常用编译器原理及特点解析
2020/03/23 Python
python 使用事件对象asyncio.Event来同步协程的操作
2020/05/04 Python
Python运算符+与+=的方法实例
2021/02/18 Python
web页面录屏实现
2019/02/12 HTML / CSS
详解HTML5布局和HTML5标签
2020/10/26 HTML / CSS
万豪国际住宅与别墅集团:Homes & Villas by Marriott International
2020/10/08 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
为什么要用EJB
2014/04/17 面试题
shell的种类有哪些
2015/04/15 面试题
活动总结的格式
2014/05/07 职场文书
2014年平安建设工作总结
2014/11/19 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
win11无法添加打印机怎么办? 提示windows无法打开添加打印机的解决办法
2022/04/05 数码科技
python计算列表元素与乘积详情
2022/08/05 Python