需要注意的是,$offset 是一个 **字符偏移量**,而不是一个 **字节偏移量**。这意味着大多数其他处理长度和偏移量的 PHP 字符串函数(strlen、strpos、使用 PREG_OFFSET_CAPTURE 的 preg_match 等)在处理多字节字符串(如 UTF-8 字符串)时,使用和返回的值不适合此方法。
字节偏移量可以使用 mb_strlen 转换为字符偏移量
<?php
function char_offset($string, $byte_offset, $encoding = null)
{
$substr = substr($string, 0, $byte_offset);
return mb_strlen($substr, $encoding ?: mb_internal_encoding());
}
?>