Уменьшить количество символов

anadikt

Гуру форума
Регистрация
28 Янв 2010
Сообщения
433
Реакции
86
Подскажите, пожалуйста, как сделать так к примеру у статьи на сайте есть заголовок и сама статья, вывожу в title заголовок, а в description саму статью, но нужно, чтобы не вся она была а к примеру первые 150 символов ...

Возможно такое сделать или нет?
 
PHP:
<?php

function cutString($string, $maxlen) {
    $len = (mb_strlen($string) > $maxlen)? mb_strripos(mb_substr($string, 0, $maxlen), ' ') : $maxlen;
    $cutStr = mb_substr($string, 0, $len);
    return (mb_strlen($string) > $maxlen)? $cutStr.' ...' : $cutStr;
}

echo cutString('hjdg asijdh ajshd jkashd kjlashd kjashd kjashd kjash dkjash dklash dakljsdh akjlsdh aklsjdh akljdh lkajd', 160);
echo '<hr>';
echo cutString('hjdg asijdh ajshd jkashd kjlashd kjashd kjashd kjash dkjash dklash dakljsdh akjlsdh aklsjdh akljdh lkajd', 100);
echo '<hr>';
echo cutString('hjdg asijdh ajshd jkashd kjlashd kjashd kjashd kjash dkjash dklash dakljsdh akjlsdh aklsjdh akljdh lkajd', 16);
echo '<hr>';

?>

Если работаете с utf-8 прочитайте маны по функциям mb_ и укажите кодеровку явно в них иначе могут быть проблемы.
 
  • Заблокирован
  • #3
Вот тут почитай... С примерами, картинками, иллюстрацией :D
Скрытое содержимое доступно для зарегистрированных пользователей!
 
PHP:
<?php

function cutString($string, $maxlen) {
    $len = (mb_strlen($string) > $maxlen)? mb_strripos(mb_substr($string, 0, $maxlen), ' ') : $maxlen;
    $cutStr = mb_substr($string, 0, $len);
    return (mb_strlen($string) > $maxlen)? $cutStr.' ...' : $cutStr;
}

echo cutString('hjdg asijdh ajshd jkashd kjlashd kjashd kjashd kjash dkjash dklash dakljsdh akjlsdh aklsjdh akljdh lkajd', 160);
echo '<hr>';
echo cutString('hjdg asijdh ajshd jkashd kjlashd kjashd kjashd kjash dkjash dklash dakljsdh akjlsdh aklsjdh akljdh lkajd', 100);
echo '<hr>';
echo cutString('hjdg asijdh ajshd jkashd kjlashd kjashd kjashd kjash dkjash dklash dakljsdh akjlsdh aklsjdh akljdh lkajd', 16);
echo '<hr>';

?>

Если работаете с utf-8 прочитайте маны по функциям mb_ и укажите кодеровку явно в них иначе могут быть проблемы.

ой беда.. зачем столько проверок то?.. ваша ф-я смело сокращается до двух простых строчек:

$cutStr = explode( PHP_EOL, wordwrap( $string, $maxlen, PHP_EOL ) );
return $cutStr[0] . ( strcmp( $string, $cutStr[0]) > 0 ? '...' : '' );

up.. проглядел, что вы по словам а не символам режете.. исправил..
 
Последнее редактирование:
Признаю я даже не в курсе о таких функциях как strcmp и wordwrap.... И да ваш вариант более элегантен хотя бы по тому что не вызывает 2 раза strlen но раз такая песня пошла то и у вас имеется изъян. если в данных встретится PHP_EOL до $maxlen результат будет не корректен.
 
Для просмотра ссылки Войди или Зарегистрируйся.. согласен.. этот делиметр первое, что под руку подвернулось.. лучше использовать что-то иное, заведомо в подстроку не входящее.. я ставил целью суть передать..
 
Назад
Сверху