Проблема с диакритическими знаками и mb_substr - PullRequest
3 голосов
/ 15 января 2010

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

* 1005 Е.Г. *

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

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

Ответы [ 2 ]

7 голосов
/ 15 января 2010

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

1 голос
/ 28 сентября 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...