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;
}

这两个字符串是我的加扰字母表。我注意到一些奇怪的行为:一些字母被错误的“乱码”字母取代。

例如:从:0 到:Z;从: 。至:H;从:7 到:d;从:2 到:e;从:1 到:X;从:h 到:N;从:l 到:j;从:o 到:g;从:0 到:Z;9

注意,那个“。” 应该是“l”(一)和“l”(较低的 L)应该是“F” - 那么这里发生了什么?!

PS .:对于调试的东西很抱歉 - 我只是想知道发生了什么......

4

2 回答 2

8

尝试使用mb_strpos(). 看起来您有一些非拉丁字符,并且 PHP 的默认字符串库与 ISO-8859-1 以外的任何内容都不兼容

于 2012-06-27T21:12:11.607 回答
0

需要将编码设置为 UTF-8 并使用 mb_strpos 而不是 strpos:

mb_internal_encoding("UTF-8");

于 2012-06-27T21:40:02.790 回答