Этот код
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');