PHP如何读取Javascript escape后的字符串

PHP 跟 Javascript 都有 HTML encoding 的函式,编码过的结果虽然类似,但是还是有些微的不同,所以不能互转。二者的差异可以可参考,节录如下:

  PHP:

  urlencode( ) All punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding. Spaces converted to +.

  urldecode( )All punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding. Spaces converted to +.

  Javascript:

  Javascript(str) All spaces, punctuation, accented characters, and any other non-ASCII characters are replaced with %xx encoding

  那要如何用 PHP 来读取 escape() 编码过的字符串呢?

  可以用php模拟js的动作  

  function   escape($str)   {  
      preg_match_all("/[\x80-\xff].|[\x01-\x7f]+/",$str,$r);  
      $ar   =   $r[0];  
      foreach($ar   as   $k=>$v){  
          if(ord($v[0])   <   128)  
              $ar[$k]   =   rawurlencode($v);  
          else  
              $ar[$k]   =   "%u".bin2hex(iconv("GBK","UCS-2",$v));
      }  
      return   join("",$ar);  
  }  
   
  function   unescape($str)   {  
      $str   =   rawurldecode($str);  
      preg_match_all("/%u.{4}|&#x.{4};|&#\d+;|.+/U",$str,$r);  
      $ar   =   $r[0];  
      foreach($ar   as   $k=>$v)   {  
          if(substr($v,0,2)   ==   "%u")  
              $ar[$k]   =   iconv("UCS-2","GBK",pack("H4",substr($v,-4)));  
          elseif(substr($v,0,3)   ==   "&#x")  
              $ar[$k]   =   iconv("UCS-2","GBK",pack("H4",substr($v,3,-1)));  
          elseif(substr($v,0,2)   ==   "&#")   {  
              $ar[$k]   =   iconv("UCS-2","GBK",pack("n",substr($v,2,-1)));  
          }  
      }  
      return   join("",$ar);  
  }  

原创文章如转载,请注明:转载自蓝色骑兵 [ http://www.wkeke.cn/ ] 本文链接地址:http://www.wkeke.cn/archives/php-javascript-escape/

Tags:


相关文章


2 个牛人指点过:

  1. 股票入门 on 2009-11-02 6:07 pm

    支持一下。占个位置

  2. QQ农场升级 on 2009-11-05 8:00 pm

    很多不错的建议!

请牛人赐教: