Усечение строки до нужной длины на PHP

Чтобы усечь длинную строку до нужно длины, не разрывая слов на части, я обычно использую следующий сниппет на PHP:


<?php
/**
 * Умная обрезка строки
 * @param string $str - исходная строка
 * @param int $lenght - желаемая длина результирующей строки
 * @param string $end - завершение длинной строки
 * @param string $charset - кодировка
 * @param string $token - символ усечения
 * @return string - обрезанная строка
 */
function cutStr($str, $lenght = 100, $end = '&nbsp;&hellip;', $charset = 'UTF-8', $token = '~') {
    $str = strip_tags($str);
    if (mb_strlen($str, $charset) >= $lenght) {
        $wrap = wordwrap($str, $lenght, $token);
        $str_cut = mb_substr($wrap, 0, mb_strpos($wrap, $token, 0, $charset), $charset);	
        return $str_cut .= $end;
    } else {
        return $str;
    }
}
?>

Вызывается так:


<?php
$str = 'Исходная строка для усечения';
echo cutStr($str, 10);
// Получим "Исходная ..."
?>

Ссылки

Для вставки кода используйте HTML-теги
<pre><code class="php">ваш код</code></pre>

  • kosmom

    Функция работает не до конца правильно. Ее попросили обрезать до 10 символов, а она вернула 12

    А за идею спасибо

    • Задача стояла именно обрезка по словам с примерной длиной, приблизительно равной указанному количеству символов

  • Алексей

    не подскажите как из тега the_title(); вырезать только английский текст а русский оставить
    например:
    есть заголовок поста «Вечнозеленое дерево ель — spruce»
    необходимо в конце поста в ссылке вывести только «Вечнозеленое дерево ель»

  • Спасибо, за замечательный сниппет. Штук десять разных способов испробовал. Ваш заработал как надо. Еще раз спасибо.