Подтвердить что ты не робот

PHP mb_substr() работает неправильно?

Этот код

print mb_substr('éxxx', 0, 1);

печатает пустое пространство: (

Предполагается напечатать первый символ é. Кажется, что это работает:

print mb_substr('éxxx', 0, 2);

Но это не так, потому что (0, 2) означает 2 символа...

4b9b3361

Ответ 1

Попробуйте передать параметр кодирования в mb_substr, как таковой:

print mb_substr('éxxx', 0, 1, 'utf-8');

Кодирование никогда не обнаруживается автоматически.

Ответ 2

На практике я обнаружил, что в некоторых системах многобайтовые функции по умолчанию соответствуют ISO-8859-1 для внутренней кодировки. Это эффективно разрушает их способность обрабатывать многобайтовый текст.

Установка хорошего значения по умолчанию, вероятно, устранит эту и некоторые другие проблемы:

mb_internal_encoding('UTF-8');