Функция 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, как мы её и попросили).
А можно и так:
echo mb_substr($string, 0, 38, ‘UTF-8’);