赤色烙印 发表于 2018-12-22 07:03:55

php模拟js escape(unescape)函数整理

  工作中一个项目使用了js escape编码传递参数php程序获取后需解码,同时某些特定链接也得编码,在网络上收集到了一些函数这里记录下


[*]/**
[*] * 类js unescape函数,解码经过escape编码过的数据
[*] * @param $str
[*] */
[*]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;
[*]}
[*]/**
[*] * 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;
[*]}




页: [1]
查看完整版本: php模拟js escape(unescape)函数整理