霜天部落 | 关注LAMP高性能、高并发架构的设计与研究

PHP实现js的escape编码和反编码

javscript中有escape编码和反编码两种函数,与之对应,我找到了这两个函数在PHP中的实现方法:

先看escape编码函数,

function phpescape($str)
{
          $sublen=strlen($str);
          $retrunString="";
          for ($i=0;$i<$sublen;$i++)
          {
                   if(ord($str[$i])>=127)
                   {
                            $tmpString = bin2hex(iconv("gb2312","ucs-2",substr($str,$i,2)));
                            //$tmpString=substr($tmpString,2,2).substr($tmpString,0,2);window下可能要打开此项
                            $retrunString.="%u".$tmpString;
                            $i++;
                   } else {
                            $retrunString.="%".dechex(ord($str[$i]));
                   }
          }
          return $retrunString;
}

下面是解码函数:

function js_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;
}

以上函数仅供参考,有不对之处还请多多指教。