0

PHPは初心者ですが、試してみようと思いました...

これが私のコードです:

function ScrambleDataPlus($inData){
    $normalAlphabet =   "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜabcdefghijklmnopqrstuvwxyzäöü.-,& ";
    $scrambAlphabet1 =  "ZXe.LSzdQVkcOt74Üüsry12b$0B#RfWöiEw,aIPAKDC3ÄN&JTjFmgn6Ux8YpvoqhGu5älHÖ9M";
    $scrambAlphabet2 =  "1eTLUÄzXjYp.dx684IÜ5äWgnCüsr7DEw,3voFGVhiQu&HÖ2JfOty#RbMP9ZamklSö$0BNcqAK";
    $reorderPosition =  array(3,12,15,7,2,11,14,1,10,8,4,13,6,16,5,9,0);

    $outData = array();
    $backup = array();
    $result = "";
    $alphabetPosition = 0;
    $newPosition = 0;

    if(strlen($inData) == 17)
    {
        //Scramble data with first aphabet
        for ($i = 0; $i < strlen($inData); $i += 2)
        {
            $alphabetPosition = strpos($normalAlphabet, $inData[$i]);               
            $outData[$i] = $scrambAlphabet1[$alphabetPosition];
            //print("From: ".$inData[$i]." to: ".$outData[$i]);
        }
        //print(sizeof($outData)."<br>");
        //printArray($outData);

        //Scramble data with second aphabet
        for ($i = 1; $i < strlen($inData); $i += 2)
        {
            $alphabetPosition = strpos($normalAlphabet, $inData[$i]);
            $outData[$i] = $scrambAlphabet2[$alphabetPosition];

        }
        //print(sizeof($outData)."<br>");
        //printArray($outData);

        //mix original order
        $backup = $outData;
        for ($i = 0; $i < strlen($inData); $i++)
        {
            $newPosition = $reorderPosition[$i];
            $outData[$i] = $backup[$newPosition];

        }
        //print(sizeof($outData)."<br>");
        //printArray($outData);

        for ($i = 0; $i < sizeof($outData); $i++)
        {
            $result .= $outData[$i];
            //print($i.". iteration: ".$outData[$i]."<br>");
        }
    }
    else
        $result = "Fehler";


    return $result;
}

2 つの文字列は、私のスクランブリング アルファベットです。いくつかの奇妙な動作に気付きました: 一部の文字が間違った「スクランブル」文字に置き換えられています。

例: から: 0 から: Z; から: 。Hまで; から: 7 から: d; から: 2 から: e; から: 1 から: X; から: h から: N; から: l から: j; から: o から: g; から: 0 から: Z; 9

「。」に注意してください。は "l" (1) で、"l" (小文字の L) は "F" である必要があります。

PS .: デバッグの件は申し訳ありません - 何が起こっているのか知りたかっただけです...

4

2 に答える 2

8

でマルチバイト文字列関数を試してくださいmb_strpos()。ラテン文字以外の文字がいくつかあるようで、PHP のデフォルトの文字列ライブラリは ISO-8859-1 以外と互換性がありません

于 2012-06-27T21:12:11.607 に答える
0

エンコーディングを UTF-8 に設定し、strpos の代わりに mb_strpos を使用する必要がありました。

mb_internal_encoding("UTF-8");

于 2012-06-27T21:40:02.790 に答える