以下是如何使用 grapheme_extract() 逐个字符循环遍历 UTF-8 字符串。
<?php
$str = "سabcक’…";
// 如果上一行没有显示,字符串包含:
//U+0633,U+0061,U+0062,U+0063,U+0915,U+2019,U+2026
$n = 0;
for ( $start = 0, $next = 0, $maxbytes = strlen($str), $c = '';
$start < $maxbytes;
$c = grapheme_extract($str, 1, GRAPHEME_EXTR_MAXCHARS , ($start = $next), $next)
)
{
if (empty($c))
continue;
echo "这个 utf8 字符是 " . strlen($c) . " 字节长,它的第一个字节是 " . ord($c[0]) . "\n";
$n++;
}
echo "$n 个 UTF-8 字符在一个包含 $maxbytes 个字节的字符串中!\n";
// 应该打印:7 个 UTF-8 字符在一个包含 14 个字节的字符串中!
?>