需要注意的是,$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());
}
?>