2012-03-19 12 views
2

PHPスクリプトが外部ソースから受け取るフォーマットの悪い文字列をサニタイズするための関数を書いています。この文字列の問題は、すべての奇数バイトがゼロであることです。そのため、関数は、偶数番号のバイトをすべて新しい配列にプッシュすることを行います。 Code:私はそれが返す値私のブラウザで見ることができるように

$serverInfoClean = array(); 
for ($i = 0; $i < strlen($serverInfo); $i++) // Remove every odd numbered byte 
{ 
    if ($i & 1) // Odd index 
    { 
     // Do nothing 
    } 
    else // Even index 
    { 
     array_push($serverInfoClean, $serverInfo[i]); 
     echo $i . ' ' . $serverInfo[i] . '<br/>'; // Debug 
    } 
} 

デバッグラインがあります。文字列の最初の文字を毎回返します。

+3

$serverInfo[i]を交換し、変数は '$'プレフィックスで表されています。 'i'は変数ではなく、' $ i'だけが変数です。 – Gumbo

+0

...私はそれを逃したとは思わない。 – Surma

答えて

2
$serverInfoClean = array(); 
$end = strlen($serverInfo); 
for ($i = 0; $i < $end; $i++) // Remove every odd numbered byte 
{ 
    if ($i & 1) // Odd index 
    { 
      // Do nothing 
    } 
    else // Even index 
    { 
      array_push($serverInfoClean, $serverInfo[$i]); 
      echo $i . ' ' . $serverInfo[$i] . '<br/>'; // Debug 
    } 
} 
+0

ループの外側にstrlenを置くので、反復ごとに評価する必要はありません。 – Surma

+0

correct-a-mundo –

1

結論として、「フォーマットが不適切な文字列」であるとは思わないと思います。文字列がUTF-16としてエンコードされているように聞こえるので、非ASCII(Unicode)文字でも機能します。

代わりにmultibyte string functionsを使用して、マルチバイト文字を正しく処理できます。

+0

ああ、ありがとう!それは私にいくつかのコーディングを保存するだろう。 – Surma

0

PHPで$serverInfo[$i]

関連する問題