js原文c+=String.fromCharCode(code.charCodeAt(i)+code.charCodeAt(i-1));function c_substr($string, $from, $length = null){//截取字符串
     preg_match_all('/[\x80-\xff]?./', $string, $match);
     if(is_null($length)){
         $result = implode('', array_slice($match[0], $from));
     }else{ 
         $result = implode('', array_slice($match[0], $from, $length)); 
     } 
     return $result;
}function unicode($code){//转换成unicode编码
preg_match_all("/[\x80-\xff]?./",$code,$ar);
$c='';
for($i=1;$i<count($ar);$i++){
 $c=$c."&#".utf8_unicode(iconv("GB2312","UTF-8",$v)).";";
 }
echo $c;
return $c;
}$codet=unicode($code);
 for($i=1;$i<strlen($codet);$i++){ 
  $c.=chr(ord(c_substr($codet,$i,abs($i-strlen($codet))))+ord(c_substr($codet,$i-1,abs($i-strlen($codet))))); 
 } 不知道哪里有错误,生成的值不一样

解决方案 »

  1.   

    JS:
    fromCharCode 方法
    从一些 Unicode 字符值中返回一个字符串。
    String.fromCharCode([code1[, code2[, ...[, codeN]]]])charCodeAt 方法
    返回一个整数,代表指定位置上字符的 Unicode 编码。
    strObj.charCodeAt(index)注意:这里的 Unicode 不是 utf-8 而是 UCS-2至于你的那两个函数因为太过老了,没有必要再使用了
    mb 和 iconv 都提供了很好的多字节编码字符串的处理
      

  2.   

    多谢,还有个问题,php中如何实现类似str.length获取字符串长度,中英文字符都算1
      

  3.   

    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);
         }function fromCharCode($code){
    $c="&#".$code.";";
    $c=iconv("UTF-8","GB2312",$c);
    return $c;
    }
    function charCodeAt($code,$i){
    preg_match_all("/[\x80-\xff]?./",$code,$ar);
    $c='';
    $c=utf8_unicode(iconv("GB2312","UTF-8",$ar[0][$i]));
    return $c;
    }function compile($code) {
    //$codet=unicode($code);
     $c=fromCharCode(charCodeAt($code,0)+mb_strlen ($code,'Gb2312')); 
     
     for($i=0;$i<mb_strlen ($code,'Gb2312');$i++){ 
      $c.=fromCharCode(charCodeAt($code, $i+1)+charCodeAt($code, $i)); 
     } 
      $c = escape($c);
     return $c;}无论如何也不能做到等效。1.这个能实现不?2.我的代码哪里错了?
      

  4.   

    与你 js 函数等效的 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;
    }
    对照 JS 函数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);
    }
      

  5.   

    太谢谢了,原来您说的iconv是这样用的啊,希望以后有机会跟您学习。