1

Тема: Как обрезать текст по словам

Проблема собственно в том, что юникодовский текст занимает больше байт, чем количество символов. Поэтому обычный substr и т.п. могут обрезать текст по служебному байту, что приводит к отображению браузером знака вопроса в конце текста. Все это не очень красиво.

До недавнего времени я вынужден был вообще пойти на крайнее извращение и перед использованием str_функций преобразовывал текст в windows-1251, выполнял нужные операции, а потом кодировал обратно в utf-8.

Вот немного модифицированная функция для таких случаев:

// Обрезаем текст по словам
function cut_text_says($text, $countword = 10, $sep = ' ') {
    $words = split($sep, $text);
    if ( count($words) > $countword )
        $text = join($sep, array_slice($words, 0, $countword));
    return $text;
}

Cтрока разбивается в массив (которые уже корректно работают с utf-8), массив обрезается, а потом объединяется в строку. Все элементарно.

Чтобы корректно обрезать текст в PunBB, вначале нужно обработать текст так:

$topic_desc = parse_message($fetch_posts['message'], $fetch_posts['hide_smilies']);
$topic_desc = strip_tags($topic_desc);

А затем вызвать функцию:

$topic_desc = cut_text_says($topic_desc);

$countword = 10 - задает количество слов.

Если вам долго не отвечают, пишите автору темы в личку или на Email.