php · 2024 年 8 月 2 日

PHP使用strlen for循环读取中文字符串出现乱码问题

在PHP中处理多字节字符串(如中文)时,如果使用了不支持多字节的字符串函数(如strlen,substr等),可能会导致乱码问题。为了避免这个问题,你可以使用mb*系列的多字节字符串函数来正确处理多字节字符串。
示例:使用mb_strlen和mb_substr避免乱码
假设你有一个包含中文的字符串,你想按字符拆分这个字符串以下是-个使用mb strlen和mb substr 的示例:

function splitString($str) {
    $length = mb_strlen($str, 'UTF-8');  // 获取字符串长度
    $result = [];

    for ($i = 0; $i < $length; $i++) {
        $char = mb_substr($str, $i, 1, 'UTF-8');  // 按字符拆分
        $result[] = $char;
    }

    return $result;
}

// 使用示例
$str = "你好,世界!";
$chars = splitString($str);
print_r($chars);  // 输出: Array ( [0] => 你 [1] => 好 [2] => , [3] => 世 [4] => 界 [5] => ! )