ホームページ  >  記事  >  バックエンド開発  >  皆さん、次の PHP コードのどこが間違っているのかを見つけるのを手伝ってください。

皆さん、次の PHP コードのどこが間違っているのかを見つけるのを手伝ってください。

WBOY
WBOYオリジナル
2016-06-23 13:50:181015ブラウズ

私は PHP を学んだばかりですが、多くのトラブルに遭遇しました。時間のある友人が次のコードで何が問題になったのかを見つけるのを手伝ってくれることを願っています。
このコードは「AND OR」暗号化と復号化のセクションです。暗号化の結果は次のとおりですが、構文に問題が残っています。アドバイスをお願いします。ありがとう!

<? header('content-type:text/html;charset=utf8');$key=array();$key[0]=1;$key[1]=2;$key[2]=3;$key[3]=4;$key[4]=5;$key[5]=6;$key[6]=7;$key[7]=8;$key[8]=9;$key[9]=10;$mystring="我擦擦"; $jiamistring=PassEncode($mystring); Echo " 加密=";Echo $jiamistring;$jiemistring=PassUnCode($jiamistring);Echo " 解密=";Echo $jiemistring;function PassEncode($s)//加密{  global $key;  $Buff = str_split($s);  $k=count($key)+1;  for ($I=0; $I<count($Buff); $I=$I+1)  {    $j=$I%$k;    $string=utf8_unicode($Buff[$I]);    $Buff[$I]=$string ^ $key[$j];  }   $mstr="0123456789";  $outstr="";  for ($I=0; $I<count($Buff); $I=$I+1)  {    $k=floor($Buff[$I]/strlen($mstr));    $j=$Buff[$I]%strlen($mstr);    $temps="$mstr[$j]"."$mstr[$k]";    $outstr=$outstr . $temps;  }   return $outstr;} function PassUnCode($s)//解密{  global $key;  $mstr="0123456789";  if (strlen($s)%2==1)  {    $function_ret="";    return $function_ret;  }   $m=0;  for ($I=1; $I<=strlen($s); $I=$I+2)  {    $t1=$s[$I-1];    $t2=$s[$I];    $j=strpos($mstr,$t1);    $k=strpos($mstr,$t2);    $n=$j+$k*strlen($mstr);    $Buff[$m]=$n;    $m=$m+1;  }   $k=count($key)+1;  $outstr="";  for ($I=0; $I<count($Buff); $I=$I+1)  {    $j=$I%$k;    $Buff[$I]=$Buff[$I] ^ $key[$j];    $outstr=$outstr . u2utf8($Buff[$I]);  }   return $outstr;}function utf8_unicode($c) {     switch(strlen($c))  {       case 1:         return ord($c);       case 2:         $n = (ord($c[0]) & 0x3f) << 6;         $n += ord($c[1]) & 0x3f;         return $n;       case 3:         $n = (ord($c[0]) & 0x1f) << 12;         $n += (ord($c[1]) & 0x3f) << 6;         $n += ord($c[2]) & 0x3f;         return $n;       case 4:         $n = (ord($c[0]) & 0x0f) << 18;         $n += (ord($c[1]) & 0x3f) << 12;         $n += (ord($c[2]) & 0x3f) << 6;         $n += ord($c[3]) & 0x3f;         return $n;     }  }  function u2utf8($c) {        $str="";        if ($c < 0x80) $str.= chr($c);        else if ($c < 0x800) {            $str.=chr(0xC0 | $c>>6);            $str.=chr(0x80 | $c & 0x3F);        } else if ($c < 0x10000) {            $str.=chr(0xE0 | $c>>12);            $str.=chr(0x80 | $c>>6 & 0x3F);            $str.=chr(0x80 | $c & 0x3F);        } else if ($c < 0x200000) {            $str.=chr(0xF0 | $c>>18);            $str.=chr(0x80 | $c>>12 & 0x3F);            $str.=chr(0x80 | $c>>6 & 0x3F);            $str.=chr(0x80 | $c & 0x3F);        }      return $str;    }  ?>


ディスカッションへの返信 (解決策)

PHP に詳しい方教えてください よろしくお願いします。

39 行目で直接エラーが報告されています: 文字列オフセット キャストが発生しました
アドバイスをお願いします
次の復号化プロセスの結果が間違っています

ついに克服して自分で実行しました

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。