Here's how to use grapheme_extract() to loop across a UTF-8 string character by character.<?php$str = "سabcक’…";// if the previous line didn't come through, the string contained://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 "This utf8 character is " . strlen($c) . " bytes long and its first byte is " . ord($c[0]) . "\n"; $n++;}echo "$n UTF-8 characters in a string of $maxbytes bytes!\n";// Should print: 7 UTF8 characters in a string of 14 bytes!?>