如何使用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 相关文章推荐
php5数字型字符串加解密代码
Apr 24 PHP
创建数据库php代码 用PHP写出自己的BLOG系统
Apr 12 PHP
PHP屏蔽过滤指定关键字的方法
Nov 03 PHP
php中动态变量用法实例
Jun 10 PHP
php文件操作之小型留言本实例
Jun 20 PHP
PHP数组实例详解
Jun 26 PHP
PHP微信刮刮卡 附微信接口
Jul 22 PHP
Yii2针对游客、用户防范规则和限制的解决方法分析
Oct 08 PHP
利用PHP获取汉字首字母并且分组排序详解
Oct 22 PHP
PHP实现类似题库抽题效果
Aug 16 PHP
PHP如何通过表单直接提交大文件详解
Jan 08 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
Apr 06 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 按位与或 (^ 、&amp;)
2013/06/21 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
jquery 输入框数字限制插件
2009/11/10 Javascript
js静态方法与实例方法分析
2011/07/04 Javascript
再谈Jquery Ajax方法传递到action(补充)
2014/05/12 Javascript
对new functionName()定义一个函数的理解
2014/05/22 Javascript
node.js中的favicon.ico请求问题处理
2014/12/15 Javascript
JS实现鼠标滑过折叠与展开菜单效果代码
2015/09/06 Javascript
给angular加上动画效遇到的问题总结
2016/02/17 Javascript
使用NodeJs 开发微信公众号(三)微信事件交互实例
2016/03/02 NodeJs
JS动态改变浏览器标题的方法
2016/04/06 Javascript
JQuery点击事件回到页面顶部效果的实现代码
2016/05/24 Javascript
浅析BootStrap Treeview的简单使用
2016/10/12 Javascript
使用Bootrap和Vue实现仿百度搜索功能
2017/10/26 Javascript
详解Vue源码中一些util函数
2019/04/24 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
浅析vue中的nextTick
2020/12/28 Vue.js
python通过pil模块将raw图片转换成png图片的方法
2015/03/16 Python
在阿里云服务器上配置CentOS+Nginx+Python+Flask环境
2016/06/18 Python
Python 中的with关键字使用详解
2016/09/11 Python
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
推荐10款最受Python开发者欢迎的Python IDE
2018/09/16 Python
Python 一键获取百度网盘提取码的方法
2019/08/01 Python
Python Pillow.Image 图像保存和参数选择方式
2020/01/09 Python
tensorflow基于CNN实战mnist手写识别(小白必看)
2020/07/20 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
英国最大的线上保健品零售商之一:Vitamin Planet
2016/12/01 全球购物
Rodd & Gunn澳大利亚官网:新西兰男装品牌
2018/09/25 全球购物
企业演讲稿范文
2013/12/28 职场文书
前台接待员岗位职责
2014/01/02 职场文书
四年级下册教学反思
2014/02/01 职场文书
社会实践活动总结报告
2014/04/29 职场文书
汽车服务工程专业自荐信
2014/09/02 职场文书
Laravel中获取IP的真实地理位置
2021/04/01 PHP
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle
vue实现登陆页面开发实践
2022/05/30 Vue.js