$string[i]不返回第i个字符


$string[i] does not return the i:th character

我正在编写一个函数,旨在清除php脚本将从外部源接收的格式错误的字符串。这个字符串的问题是,每个奇数字节都是零,所以函数所做的是将每个偶数字节推送到一个新的数组。代码:

$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
    }
}

调试行在那里,所以我可以在浏览器中看到它返回的值。它每次都返回字符串中的第一个字符。

$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
    }
}

我认为您不应该得出它是一个"格式错误的字符串"的结论。这听起来很像您的字符串被编码为UTF-16,因此它也可以使用非ASCII(Unicode)字符。

您可以使用多字节字符串函数来正确处理多字节字符。

$serverInfo[$i] 替换$serverInfo[i]