Проблема с диакритическими знаками и mb_substr
Вопрос
Я разделяю строку Unicode диакритическими знаками, используя mb_substr
функция, но она работает так, как я бы использовал simple substr
функция.Он разделяет символы Юникода пополам, отображая вопрос, помеченный ромбом.
Например.
echo mb_substr('ááááá', 0, 5); //Displays áá�
Что может быть не так?
Решение
У меня такая же проблема, если я не укажу кодировку в качестве последнего параметра для mb_substr
:по умолчанию, по крайней мере на моем сервере, ISO-8859-1
.
Но, если я правильно настрою кодировку, на UTF-8
, все работает нормально :
echo mb_substr('ááááá', 0, 5, 'UTF-8');
Получает правильное отображение в браузере :
ááááá
Видишь mb_substr
(цитирую, курсив мой) :
string mb_substr ( string $str , int $start [,
int $length [, string $encoding ]] )
Тот самый
encoding
параметром является кодировка символа. Если он опущен, будет использоваться внутренний символ значение кодировки.
Другие советы
У меня была та же проблема, и приведенные выше ответы мне тоже помогли.Помимо настройки php.ini
или используя ini_set()
, это также может помочь использовать mb_internal_encoding('utf-8');
(utf-8
может быть заменен по вашему выбору) для установки постоянной кодировки для многобайтовых функций.