Обрезка строки на 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 — количетсво обрезаемых символов