小白用php仿照js写的一个加密方法 就是有问题 求解答

原本的js是一段加密的方法
function checkform()
{
var dcode;
var dcode1;
var dcode2;

dcode=document.form1.pwd.value;
dcode1="";
dcode2=1275903582
dcode2=""+dcode2*137;
var tmpstr;
var dcodelen;
dcodelen=dcode.length;
for (i=1;i<=dcodelen;i++){
tmpstr = dcode.substring(i-1,i);
dcode1=dcode1 + String.fromCharCode(tmpstr.charCodeAt(0)-i-dcode2.substring(i-1,i));
}

document.form1.pwd.value=dcode1;

}

这是我仿照写的php代码 但始终有错
//加密
function encryption($dcode){

    $dcode1=''; 
    $dcode2=1275903582;
    $dcode2 = "".$dcode2 * 137; 
    $tmpstr='';  
    for ($i=1;$i<=count($dcode);$i++)
    { 
            $tmpstr = substr($dcode,$i-1,1); 
            $tmpstr = $this->charCodeAt($tmpstr, 0); 
            $num = $this->fromCharCode($tmpstr-$i-substr($dcode2,$i-1,1)); 
            $dcode1=$dcode1 + $num;
    }  
            $encryDcode=$dcode1; 
            print_r($encryDcode); 
            die(); 
            return $encryDcode; 
    } 

function fromCharCode($codes) {
if (is_scalar($codes))
$codes= func_get_args();
$str= '';
foreach ($codes as $code)
$str.= chr($code);
return $str;
}

function charCodeAt($str, $index)
{
$char = mb_substr($str, $index, 1, 'UTF-8');

if (mb_check_encoding($char, 'UTF-8'))
{
$ret = mb_convert_encoding($char, 'UTF-32BE', 'UTF-8');
return hexdec(bin2hex($ret)); } else { return null;
}
}

这个和你贴出来的js加密后的一样


    function encryption($dcode, $dcode2) {
        $dcode1 = "";
        $dcode2 = "" . $dcode2 * 137;
        $tmpstr="";
        $dcodelen =strlen($dcode);
        for ($i = 0; $i < $dcodelen; $i++) {
            $tmpstr = substr($dcode,$i , 1);
            $cd=charCodeAt($tmpstr,0);

            $dcode1 = $dcode1 . fromCharCode($cd -( $i+1)- substr($dcode2,$i , 1));
        }
        return $dcode1;
    }
    function fromCharCode($codes) {
      if (is_scalar($codes)) $codes= func_get_args();
      $str= '';
      foreach ($codes as $code) $str.= chr($code);
      return $str;
    }
    function charCodeAt($str, $index){
      $char = mb_substr($str, $index, 1, 'UTF-8'); 
      if (mb_check_encoding($char, 'UTF-8'))    {
        $ret = mb_convert_encoding($char, 'UTF-32BE', 'UTF-8');
        return hexdec(bin2hex($ret));
      }
      return null;
   }
  echo encryption("123456", 1275903582);

就比如$dcode=199205 dcode2=9288904070 它加密出来是%2F5%2F%2C%26%28 求解答啊