Web

Проблема php: mb_substr() и кодировка utf-8

Функция php substr() отвратительно работает с кодировкой UTF-8, так как не поддерживает мультибайтовые кодировки, к коим и принадлежит UTF-8. В интернете встречаются советы использовать для обрезки строк функцию mb_substr():

[php]
$string = ‘Самым большим из современных представителей является императорский пингвин.’;

echo mb_substr($string, 0, 38);
[/php]

Но не все так  ладненько. Данный код часто возвращает в конце выводимой строки знак вопросика в черном ромбике, или другую кракозябру:

Общая характеристик�

Чтобы этого не случалось, можно задействовать другую функцию:

[php]
echo iconv_substr($string, 0, 38, ‘UTF-8′)’;
[/php]

И тогда получится так:

Общая характеристика Самым большим

Примечание редакции: Также, кроме корректной обрезки, налицо тот факт, что выводимая строка стала вдвое длиннее. Естественно. Функция mb_substr() получает входные данные в количестве байт (2 байта на символ у UTF-8), а iconv_substr() сначала переводит текст в однобайтовую кодировку, обрезает, а уж затем выводит в заданной кодировке (UTF-8, как мы её и попросили).

2 комментария

Добавить комментарий