Проблема с диакритическими знаками и mb_substr

Я нарезаю строку Unicode с диакритическими знаками, используя функцию mb_substr, но она работает так же, как если бы я использовал простую функцию substr. Он разделяет символы Юникода пополам, отображая ромб с вопросительным знаком.

E.g.

echo mb_substr('ááááá', 0, 5); //Displays áá�

Что может быть не так?


person Josef Sábl    schedule 15.01.2010    source источник


Ответы (2)


У меня та же проблема, если я не укажу кодировку в качестве последнего параметра для 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 — это кодировка символов. Если он опущен, будет использоваться значение внутренней кодировки символов.

person Pascal MARTIN    schedule 15.01.2010
comment
Внутренняя кодировка символов может быть изменена в php.ini (даже через ini_set(), если вы не можете изменить ее для всей системы). Я думаю, что это более разумный вариант (и я бы пристрелил идиота, который выбрал однобайтовую кодировку по умолчанию для специальных многобайтовых функций). - person Kornel; 15.01.2010

У меня была такая же проблема, и приведенные выше ответы тоже помогли мне. Помимо настройки php.ini или использования ini_set() также может помочь использование mb_internal_encoding('utf-8'); ( utf-8 можно заменить на ваше усмотрение) для установки постоянной кодировки для многобайтовых функций.

person user1550920    schedule 27.09.2012