Просмотров: 1517

Корректное урезание строк по словам и (или) по символам.

Если пользоваться функцией substr при "обрезании" части текста, например для того чтобы вывести превью новостей, иногда последние символы отображаются значком вопроса в ромбике или каким нибудь другим краказяблом. Такое безобразие происходит в частности с русскими текстами в юникодовской кодировке. Объясняется это тем что, как правильно заметил товарищ Макс, в данном случае сам текст содержит больше байт, нежели количество символов.
В самой статье достаточно много вариантов решения вопроса, сдесь же мне хотелось бы выложить модифицированную функцию где текст урезается не только по словам , но и по символам в случае если текст длиннннннее заданного количества $maxchar.
Аргументы: $text - исходный текст, $maxwords - максимальное количество слов, $maxchar - максимальное количество символов. Последние два параметра не обязательны т.к. функция содержит дефолтные значения.
  1. "Чистим" текст от лишних тэгов HTML (в превюшке они не нужны).
  2. Создаем массив состоящий из слов нашего текста.
  3. Считаем количество символов в тексте, учитывая кодировку строки.
  4. Если количество слов превышает макимально допустимое - "урезаем" массив слов до заданной велечины $maxwords.
  5. Если количество символов превышает макимально допустимое - "урезаем" стоку заданной велечины $maxchar.


function getPrewText( $text, $maxwords = 30, $maxchar = 300 ){

$text = strip_tags( $text );
$words = split( ' ', $text );
$char = iconv_strlen( $text, 'utf-8' );

if ( count( $words ) > $maxwords ){
$text = join( $sep, array_slice($words, 0, $maxwords ));
}

if ( $char > $maxchar ){
$text = iconv_substr( $text, 0, $maxchar, 'utf-8' );
}

return $text;
}
]]>twitter.com Google Buzz google.com bobrdobr.ru del.icio.us technorati.com linkstore.ru news2.ru rumarkz.ru memori.ru moemesto.ru]]>


Теги: ,
Кирпич цена, двойной тротуарная брусчатка пустотелый Киев. Штраф под кирпич.
Эта запись опубликована: Вторник, 21 октября 2008 в рубрике PHP.

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

Следите за комментариями по RSS
  1. Для работы с UTF-8 я бы лучше всего использовал функцию mb_substr. Конечно не на всех хостингах включено использование mb но в PHP6 по дефолту будет использоваться UTF-8.

  2. что то у меня эта фунцция выводит все слова без пробелов...

  3. аа... разобрался...

    спасибо

  4. я у себя делаю так :

    чищу текст от тегов и лишних пробелов

    разбиваю на предложения ( explode(". ",... ) )

    и вывожу склейку первых 2-4 элементов полученного массива

Оставьте комментарий!

Не регистрировать/аноним

Используйте нормальные имена.

Зарегистрировать/комментатор

Для регистрации укажите свой действующий email и пароль. Связка email-пароль позволяет вам комментировать и редактировать данные в вашем персональном аккаунте, такие как адрес сайта, ник и т.п. (Письмо с активацией придет в ящик, указанный при регистрации)

grin LOL cheese smile wink smirk rolleyes confused surprised big surprise tongue laugh tongue rolleye tongue wink raspberry blank stare long face ohh grrr gulp oh oh downer red face sick shut eye hmmm mad angry zipper kiss shock cool smile cool smirk cool grin cool hmm cool mad cool cheese vampire snake excaim question

(обязательно)