Хорошо, это сбило меня с толку, что вы не можете заставить это работать, потому что оно должно работать просто отлично. Наконец, я думаю, что нашел причину, по которой это не работает для вас.
Я думаю, что здесь происходит то, что ваш браузер отображает неправильную кодировку, а вы выводите символы utf-8.
у вас есть пара вариантов. Во-первых, если вы отображаете все это как часть html-страницы, проверьте ваши метатеги, чтобы увидеть, устанавливают ли они кодировку символов. Если это так, измените это на:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
далее, если вы просто выводите это непосредственно в браузер, используйте функцию заголовка для установки кодировки символов следующим образом:
header("Content-type: text/html; charset=utf-8");
легкий тест:
<?php
header("Content-type: text/html; charset=utf-8");
$text = "áéíó";
echo mb_substr($text, 0, 3, 'utf-8');
?>
без этого ваш браузер по умолчанию будет использовать другую кодировку и некорректно отображать текст. Надеюсь, это поможет вам решить эту проблему, если нет, я буду продолжать пытаться:)