js解码的函数需要运行在通过a.php生成的b.html中,加密要求不高,但是不要base64
自己改良过,由于php和js编码不同,造成无法还原http://topic.csdn.net/u/20121026/21/aa481d57-5268-4377-844a-11e0abf9fdd0.html?seed=358554303&r=80007043#r_80007043

解决方案 »

  1.   

    不知是否符合你的需求
    <script>
    function compile(code) {      
      var c=String.fromCharCode(code.charCodeAt(0)+code.length);
      for(var i=1;i<code.length;i++){
        c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));
      }
      return escape(c);
    }
    document.write(compile('ab中cd'));
    </script><?php
    echo compile('ab中cd');
    function compile($code) {
      $code = array_values(unpack('n*', iconv(strlen('汉')==2 ? 'gbk' : 'utf-8', 'ucs-2', $code)));
      $c[] = $code[0] + count($code);
      for($i=1; $i<count($code); $i++){
        $c[] = $code[$i] + $code[$i-1];
      }
      $r = '';
      foreach($c as $v) {
        if($v < 256) $r .= urlencode(chr($v));
        else $r .= '%u' . strtoupper(dechex($v));
      }
      return $r;
    }
    GBK环境中结果
    f%C3%u4E8F%u4E90%C7 f%C3%u4E8F%u4E90%C7
      

  2.   

    <?php
    function compile($code) {
      $code = array_values(unpack('n*', iconv(strlen('汉')==2 ? 'gbk' : 'utf-8', 'ucs-2', $code)));
      $c[] = $code[0] + count($code);
      for($i=1; $i<count($code); $i++){
        $c[] = $code[$i] + $code[$i-1];
      }
      $r = '';
      foreach($c as $v) {
        if($v < 256) $r .= urlencode(chr($v));
        else $r .= '%u' . strtoupper(dechex($v));
      }
      return $r;
    }
    echo compile('钓鱼岛是中国的');
    ?><br/>
    <script>function compile(code) {      
      var c=String.fromCharCode(code.charCodeAt(0)+code.length);
      for(var i=1;i<code.length;i++){
        c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));
      }
      return escape(c);
    }
     document.write(compile('钓鱼岛是中国的'));
    </script>运行结果
    %u949A%u1310F%uF917%uC2CA%uB45C%uA52A%uCD81
    %u949A%u310F%uF917%uC2CA%uB45C%uA52A%uCD81 请教一下,您这个函数输入的字符串第二位不能是汉字,如“钓鱼岛”,如果第二位是字母就没问题。
      

  3.   

    [code=JScript]
    $code = array_values(unpack('n*', iconv(strlen('汉')==2 ? 'gbk' : 'utf-8', 'ucs-2', $code)));[code]
    问题应该就在这两句里,因为第二行的$code[0]值已经错误了
      

  4.   

    问题在dechex($v)这里,第二个字符的值始终比js里对应的大10000,
    找到问题了,可惜不会改