Предполагается напечатать первый символ é. Кажется, что это работает:
print mb_substr('éxxx', 0, 2);
Но это не так, потому что (0, 2) означает 2 символа...
Ответ 1
Попробуйте передать параметр кодирования в mb_substr, как таковой:
print mb_substr('éxxx', 0, 1, 'utf-8');
Кодирование никогда не обнаруживается автоматически.
Ответ 2
На практике я обнаружил, что в некоторых системах многобайтовые функции по умолчанию соответствуют ISO-8859-1 для внутренней кодировки. Это эффективно разрушает их способность обрабатывать многобайтовый текст.
Установка хорошего значения по умолчанию, вероятно, устранит эту и некоторые другие проблемы: