如何使用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&amp;&amp;mysql)三
Oct 09 PHP
可定制的PHP缩略图生成程式(需要GD库支持)
Mar 06 PHP
PHP 获取MSN好友列表的代码(2009-05-14测试通过)
Sep 09 PHP
PHP操作mysql函数详解,mysql和php交互函数
May 19 PHP
CI框架源码阅读,系统常量文件constants.php的配置
Feb 28 PHP
ThinkPHP之foreach标签使用概述
Jun 30 PHP
php实现文件下载代码分享
Aug 19 PHP
php实现字符串首字母转换成大写的方法
Mar 17 PHP
ThinkPHP中数据操作案例分析
Sep 27 PHP
php实现倒计时效果
Dec 19 PHP
PHP使用fopen与file_get_contents读取文件实例分享
Mar 04 PHP
Laravel定时任务的每秒执行代码
Oct 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
用php写的serv-u的web申请账号的程序
2006/10/09 PHP
PHP中基本符号及使用方法
2010/03/23 PHP
php实现的CSS更新类实例
2014/09/22 PHP
学习php设计模式 php实现抽象工厂模式
2015/12/07 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
PHP实现多图上传(结合uploadify插件)思路分析
2016/11/30 PHP
20个最新的jQuery插件
2012/01/13 Javascript
JavaScript Scoping and Hoisting 翻译
2012/07/03 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
Document.location.href和.replace的区别示例介绍
2014/03/04 Javascript
当某个文本框成为焦点时即清除文本框内容
2014/04/28 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
JS实现兼容性好,带缓冲的动感网页右键菜单效果
2015/09/18 Javascript
vue指令以及dom操作详解
2017/03/04 Javascript
jquery实现静态搜索功能(可输入搜索文字)
2017/03/28 jQuery
利用JS实现scroll自定义滚动效果详解
2017/10/17 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
浅谈vue3中effect与computed的亲密关系
2019/10/10 Javascript
详解vue中多个有顺序要求的异步操作处理
2019/10/29 Javascript
JavaScript arguments.callee作用及替换方案详解
2020/09/02 Javascript
Python加pyGame实现的简单拼图游戏实例
2015/05/15 Python
Python实现获取域名所用服务器的真实IP
2015/10/25 Python
python matlibplot绘制3D图形
2018/07/02 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
socket.io 和canvas 实现的共享画板功能
2019/05/22 HTML / CSS
金融事务专业毕业生求职信
2014/02/23 职场文书
诚信考试承诺书
2014/03/27 职场文书
项目投资意向书
2014/04/01 职场文书
酒店辞职书怎么写
2015/02/26 职场文书
2015年留守儿童工作总结
2015/05/22 职场文书
Python中OpenCV实现查找轮廓的实例
2021/06/08 Python
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python
python的html标准库
2022/04/29 Python