Корректное урезание строк по словам в PHP
Все гениальное не просто, а очень просто! Константин придумал способ как корректно обрезать текст по словам причем без использвания строковых функций.
Проблема собственно в том, что юникодовский текст занимает больше байт, чем количество символов. Поэтому обычный substr и т.п. могут обрезать текст по служебному байту, что приводит к отображению браузером знака вопроса в конце текста. Все это не очень красиво.
До недавнего времени я вынужден был вообще пойти на крайнее извращение и перед использованием str_функций преобразовывал текст в windows-1251, выполнял нужные операции, а потом кодировал обратно в utf-8.
Константин сделал совсем просто: строка разбивается в массив (которые уже корректно работают с utf-8), массив обрезается, а потом объединяется в строку. Все элементарно.
Вот немного модифицированная функция для таких случаев:
function maxsite_str_word($text, $counttext = 10, $sep = ' ') {
$words = split($sep, $text);
if ( count($words) > $counttext )
$text = join($sep, array_slice($words, 0, $counttext));
return $text;
}
То есть в ней можно указать сам текст, количество слов и разделитель (это для универсальности).
Постоянная ссылка: http://maxsite.org/?p=325
Версия для печати
