我是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 - 我只是想知道发生了什么......
答案 0 :(得分:7)
尝试使用mb_strpos()
的多字节字符串函数。看起来你有一些非拉丁字符,PHP的默认字符串库与ISO-8859-1
答案 1 :(得分:0)
需要将编码设置为UTF-8并使用mb_strpos而不是strpos:
mb_internal_encoding( “UTF-8”);