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