Функция strlen() - возвратит количество байт, а не число символов в строке - это для однобайтовых кодировок
mb_strlen() - Возвращает количество символов в строке (string) string, имеющих кодировку символов encoding. Многобайтовый символ вычисляется как 1.это как раз для UTF-8
и есть еще десяток функций с префиксом mb_ - для других операций с UTF-8 строками
Зачем исправлять то, что не является ошибкой? PHP прекрасно поддерживает многобайтные кодировки. Более того, кодировка UTF-8 является стандартом de facto в современном PHP-коде.
Надо лишь понимать, что в PHP существуют ДВЕ библиотеки для работы со строками: одна для однобайтных кодировок и функций, не зависящих от кодировки, вторая - для многобайтных версий тех функций, которые зависят от типа кодировки.
P.S. При разработке PHP 6 была сделана попытка переделать виртуальную машину на многобайтные строки, но она была признана неудачной, проект был закрыт, а прочие новые возможности языка, предлагаемые в шестёрке, были постепенно встроены в версии 5.4-5.6.
Большинство строковых PHP-функций, таких как substr(), не поддерживают многобайтные строки. Многобайтное расширение (mbstring) имеет строковые РНР-функции с поддержкой многобайтных символов (например, substr() поддерживает mb_substr()). Многобайтное расширение (mbstring) также поддерживает 'перегрузку функций' для добавления функциональности многобайтных строк без модификации кода.