Обрезка строки на php по словам и по символам одновременно
Не раз приходилось сталкиваться с обрезкой строки до определенного количества слов. Однако, слова могут быть разной длины, поэтому было решено написать функцию, которая бы делала обрезку по словам, а если и нужно, то и предварительно по количеству символов.
Есть много решений, но все они не собраны воедино + не все работают с русскими символами в кодировке utf-8
Сама функция с комментариями.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | <?php function crop_string($text, $length = 50, $postfix = '', $chars = 600) { // Очищаем от html тегов $text = strip_tags($text); // Делаем обрезку по символам, не забывая проверить что обрезка // идет не на большее количество симоволо, чем сам текст $text = mb_strlen($text) > $chars? mb_strcut($text, 0, $chars) : $text; $words = explode(' ', $text); // После разбивки текста на слова удаляем последний элемент, т.к. слово // с большей вероятностью было обрезано array_pop($words); // Проверяем - если уже достигнут лимит обрезаемых слов, то возвращаем // как есть if ($length < 1 || sizeof($words) <= $length) { return implode(' ', $words); } // Обрезаем слова до указанного количества и удаляем спецсимволы, которые // могли остаться на конце после всех манипуляций обрезки $words = array_slice($words, 0, $length); $out = implode(' ', $words); $out = rtrim($out, "!,.-"); return $out . $postfix; } ?> |
$text — обрезаемый текст
$length — количество обрезаемых слов
$postfix — текст, который будет добавлен после обрезанного текста (например ‘…’)
$chars — количетсво обрезаемых символов