strpos()返回错误的位置

时间:2012-06-27 21:10:30

标签: php arrays string strpos

我是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:sry for the debug stuff - 我只是想知道发生了什么......

2 个答案:

答案 0 :(得分:7)

尝试使用mb_strpos()的多字节字符串函数。看起来你有一些非拉丁字符,PHP的默认字符串库与ISO-8859-1

之外的任何东西都不兼容

答案 1 :(得分:0)

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

mb_internal_encoding( “UTF-8”);