还是有点不明白,我现在要实现在php中使用跟js中escape功能相同的函数编码,然后再js中使用unescape解码,但php这个函数就是达不到效果,我怎么办,请给个办法

解决方案 »

  1.   

    用了我的函数还要说三道四的...
    难道自己去处理一下大小写都嫌麻烦吗?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".strtoupper(bin2hex(iconv("GB2312","UCS-2",$v)));
      } 
      return join("",$ar);

      

  2.   

    <?php
    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("GB2312","UCS-2",$v));
      } 
      return join("",$ar);

    ?><br />
    <?php
    $a="中国";
    echo $a;
    echo "<br>";
    $b=escape($a);
    echo $b;
    echo "<br>";
     ?>
      <script type="text/javascript" language="javascript">
     document.write(escape('<?=$a?>')); 
      
      </script>代码运行结果
    中国
    %u6d93%u%u
    %u4E2D%u56FD 
    很明显效果跟js的escape不一样
      

  3.   

    如果用楼上的那个函数的话escape('中国')根本什么都不显示
    结果:
    中国%u4E2D%u56FD
    查看源文件得到的是
    <br />
    中国<br><br>  <script type="text/javascript" language="javascript">
     document.write(escape('中国')); 
      
      </script>
    两个<br>中间的escape('中国')函数,什么都没显示
      

  4.   

    如果是UTF8编码    Js的encodeURIComponent直接在PHP端就能用
      

  5.   

    js编码推荐用encodeURIComponent,不推荐用escape了
    PHP编码一般用urlencode或rawurlencode至于能否通用,没试过
      

  6.   

    encodeURI() 不编码的字符: ~!@#$&*()=:/,;?+'
    encodeURIComponent()不编码的字符: ~!*()'
    escape()不编码的字符:@*/+
    跟php对应的函数都有差别,