如何使用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 相关文章推荐
文章推荐系统(三)
Oct 09 PHP
JoshChen_php新手进阶高手不可或缺的规范介绍
Aug 16 PHP
PHP网页游戏学习之Xnova(ogame)源码解读(十六)
Jun 30 PHP
PHP获取表单所有复选框的值的方法
Aug 28 PHP
Yii把CGridView文本框换成下拉框的方法
Dec 03 PHP
php中session与cookie的比较
Jan 27 PHP
php获取系统变量方法小结
May 29 PHP
PHP使用正则表达式实现过滤非法字符串功能示例
Jun 04 PHP
ThinkPHP5 的简单搭建和使用详解
Nov 15 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 PHP
PHP生成图表pChart的示例解析
Jul 31 PHP
php的lavarel框架中join和orWhere的用法
Dec 28 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
56.com视频采集接口程序(PHP)
2007/09/22 PHP
PHP字符串 ==比较运算符的副作用
2009/10/21 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
浅析PHP反序列化中过滤函数使用不当导致的对象注入问题
2020/02/15 PHP
nodejs 后缀名判断限制代码
2011/03/31 NodeJs
js不完美解决click和dblclick事件冲突问题
2012/07/16 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
JavaScript父子窗体间的调用方法
2015/03/31 Javascript
js实现显示当前状态的导航效果代码
2015/08/28 Javascript
AngularJS基础教程之简单介绍
2015/09/27 Javascript
详解iframe与frame的区别
2016/01/13 Javascript
动态加载js、css的简单实现代码
2016/05/26 Javascript
Javascript中常见的逻辑题和解决方法
2016/09/17 Javascript
jQuery ajax动态生成table功能示例
2017/06/14 jQuery
three.js搭建室内场景教程
2018/12/30 Javascript
谈谈IntersectionObserver懒加载的具体使用
2019/10/15 Javascript
Element的el-tree控件后台数据结构的生成以及方法的抽取
2020/03/05 Javascript
Vue+element-ui添加自定义右键菜单的方法示例
2020/12/08 Vue.js
Python面向对象之继承代码详解
2018/01/29 Python
pip install urllib2不能安装的解决方法
2018/06/12 Python
Python tkinter label 更新方法
2018/10/11 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
将Python文件打包成.EXE可执行文件的方法
2019/08/11 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
Python 下载Bing壁纸的示例
2020/09/29 Python
用python读取xlsx文件
2020/12/17 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
北京天润融通.net面试题笔试题
2012/02/20 面试题
init进程的作用
2015/08/20 面试题
优秀员工获奖感言
2014/03/01 职场文书
水电站项目建议书
2014/05/12 职场文书
关于感恩的演讲稿200字
2014/08/26 职场文书
企业法人任命书
2015/09/21 职场文书
MySQL池化框架学习接池自定义
2022/07/23 MySQL