2012-06-27 53 views
0

我是新來的PHP,但我想我會試試看......strpos()返回錯誤的位置

這裏是我的代碼:

function ScrambleDataPlus($inData){ 
    $normalAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZÄÖÜ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; 
} 

兩個字符串我亂碼字母。 我注意到一些奇怪的行爲:有些字母正在被錯誤的「亂碼」字母所取代。

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

通知,即「。」應該是「l」(一)和「l」(較低的L)應該是「F」 - 那麼這裏發生了什麼?

PS:SRY對於調試的東西 - 我只是想知道是怎麼回事......

回答

7

儘量多字節字符串函數與mb_strpos()。它看起來像你有一些非拉丁字符,和PHP的默認字符串庫不與任何東西,但ISO-8859-1

+0

使用mb_strpos()似乎有相同的結果...:/ – reijin

+0

您仍在使用字符串,就好像它們是數組一樣。使用mb_substr而不是類似數組的語法。 – Lusitanian

+1

發現我自己的錯誤: 需要設置mb_internal_encoding(「UTF-8」);謝謝! – reijin

0

需要設置編碼爲UTF-8和使用mb_strpos可以不用strpos兼容:

mb_internal_encoding(「UTF-8」);

相關問題