如何使用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下删除字符串中HTML标签的函数
Aug 27 PHP
PHP 七大优势分析
Jun 23 PHP
PHP图片处理之使用imagecopyresampled函数实现图片缩放例子
Nov 19 PHP
Yii实现多按钮保存与提交的方法
Dec 03 PHP
服务器上配置PHP运行环境教程
Feb 12 PHP
php关联数组快速排序的方法
Apr 17 PHP
PHP对称加密函数实现数据的加密解密
Oct 27 PHP
php生成条形码的图片的实例详解
Sep 13 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
Feb 06 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
Oct 24 PHP
php实现JWT验证的实例教程
Nov 26 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的5个入手程序
2006/11/23 PHP
php调用mysql存储过程
2007/02/14 PHP
PHP高级对象构建 多个构造函数的使用
2012/02/05 PHP
thinkphp中html:list标签传递多个参数实例
2014/10/30 PHP
PHP-FPM实现性能优化
2016/03/31 PHP
php常用正则函数实例小结
2016/12/29 PHP
PHP的mysqli_sqlstate()函数讲解
2019/01/23 PHP
用CSS+JS实现的进度条效果效果
2007/06/05 Javascript
jQuery 插件 将this下的div轮番显示
2009/04/09 Javascript
JQuery触发radio或checkbox的change事件
2012/12/18 Javascript
在JavaScript中实现类的方式探讨
2013/08/28 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
用jquery模仿的a的title属性的例子
2014/10/22 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
javascript中this指向详解
2016/04/23 Javascript
Vue数组更新及过滤排序功能
2017/08/10 Javascript
浏览器调试动态js脚本的方法(图解)
2018/01/19 Javascript
基于Axios 常用的请求方法别名(详解)
2018/03/13 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
详解Python中DOM方法的动态性
2015/04/11 Python
Python使用pickle模块报错EOFError Ran out of input的解决方法
2018/08/16 Python
Python解决线性代数问题之矩阵的初等变换方法
2018/12/12 Python
Python3实现飞机大战游戏
2020/04/24 Python
Python截图并保存的具体实例
2021/01/14 Python
使用phonegap创建联系人的实现方法
2017/03/30 HTML / CSS
公司人事专员岗位职责
2014/08/11 职场文书
代理人委托书
2014/09/16 职场文书
教师三严三实心得体会
2014/10/11 职场文书
平安建设汇报材料
2014/12/29 职场文书
运动会闭幕式通讯稿
2015/07/18 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
jackson json序列化实现首字母大写,第二个字母需小写
2021/06/29 Java/Android
全新239军机修复记
2022/04/05 无线电
本地搭建minio文件服务器(使用bat脚本启动)的方法
2022/07/15 Servers