如何使用PHP实现javascript的escape和unescape函数

 更新时间:2013年06月29日 09:50:50   作者:  
本篇文章是对使用PHP实现javascript的escape和unescape函数的方法进行了详细的分析介绍,需要的朋友参考下
前端开发工程师都知道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;
}

相关文章

  • 如何使用Zephir轻松构建PHP扩展

    如何使用Zephir轻松构建PHP扩展

    通过PHP扩展,我们可以在php代码中使用一些特定的方法(大部分的 php扩展都是用C写的)。本文将介绍如何使用Zephir轻松构建PHP扩展。
    2021-05-05
  • php include和require的区别深入解析

    php include和require的区别深入解析

    本篇文章是对php中include与require的区别进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • 使用Zttp简化Guzzle 调用

    使用Zttp简化Guzzle 调用

    在 PHP 的项目中,如果你需要通过代码来发起 HTTP 请求,相信很多人对 GuzzleHttp 这个 Package 很熟悉,然而其实在使用 Guzzle 的时候,我们依然可以做得更简便一点的,下面我们就来看下今天的主角--Zhttp
    2017-07-07
  • php实现图片按比例截取的方法

    php实现图片按比例截取的方法

    这篇文章主要介绍了php实现图片按比例截取的方法,涉及php针对图形的读取、运算及生成相关操作技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2017-02-02
  • php 基础函数

    php 基础函数

    本文主要介绍了php的基础函数。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • PHP二维数组分页2种实现方法解析

    PHP二维数组分页2种实现方法解析

    这篇文章主要介绍了PHP二维数组分页2种实现方法解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • PHP ignore_user_abort函数详细介绍和使用实例

    PHP ignore_user_abort函数详细介绍和使用实例

    这篇文章主要介绍了PHP ignore_user_abort函数详细介绍和使用实例,本文包含2位作者的文章,相信可以帮你快速的理解ignore_user_abort函数,需要的朋友可以参考下
    2014-07-07
  • PHP实现截取中文字符串不出现?号的解决方法

    PHP实现截取中文字符串不出现?号的解决方法

    这篇文章主要介绍了PHP实现截取中文字符串不出现?号的解决方法,涉及php字符串遍历及编码转换等相关操作技巧,需要的朋友可以参考下
    2016-12-12
  • XHProf报告字段含义的解析

    XHProf报告字段含义的解析

    下面小编就为大家带来一篇XHProf报告字段含义的解析。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-05-05
  • php将字符串转换为数组实例讲解

    php将字符串转换为数组实例讲解

    在本篇文章里小编给大家分享的是关于php将字符串转换为数组实例讲解,需要的朋友们可以学习下。
    2020-05-05

最新评论