我是新來的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對於調試的東西 - 我只是想知道是怎麼回事......
使用mb_strpos()似乎有相同的結果...:/ – reijin
您仍在使用字符串,就好像它們是數組一樣。使用mb_substr而不是類似數組的語法。 – Lusitanian
發現我自己的錯誤: 需要設置mb_internal_encoding(「UTF-8」);謝謝! – reijin