بنده این تابع رو خیلی وقت پیش برای پروژهء خودم نوشتم:
function utf8_strlen($string) {
$utf8_char_pattern='/[\x09\x0A\x0D\x20-\x7E]|[\xC2-\xDF][\x80-\xBF]|\xE0[\xA0-\xBF][\x80-\xBF]|[\xE1-\xEC\xEE\xEF][\x80-\xBF]{2}|\xED[\x80-\x9F][\x80-\xBF]|\xF0[\x90-\xBF][\x80-\xBF]{2}|[\xF1-\xF3][\x80-\xBF]{3}|\xF4[\x80-\x8F][\x80-\xBF]{2}/';
$results_arr=array();
preg_match_all($utf8_char_pattern, $string, $results_arr);
return count($results_arr[0]);
}
دقیقا همون کار رو انجام میده. کافیه اسمش رو عوض کنی و در فایلهای خودت اینکلود کنی.