ProfiPHPProfiPHP
Категория: Полезное в PHP

Обрезка строки без разрыва слов

Если у вас есть расширение php_mbstring то выполнить эту задачу можно с помощью функции mb_substr, которая корректно обрабатывает юникод. А вот если нет, можно воспользоваться альтернативным решением, резать по словам:
$text = 'Этот текст нужно обработать как нам нужно!';
$arr = explode( ' ', $text );
$arr = array_slice( $arr, 0, 5 );
$text = implode( ' ', $arr ).'...'; // Этот текст нужно обработать как ...
unset( $arr );
То есть мы сначала занесли в элементы массива весь текст, который был обработан функцией Explode, потом объединили 5 элементов этого массива в один, с помощью функции Array_slice, и перевели все в строку функцией Implode, которая объединила наших 5 элементов массива в один по знакам пробела.

С помощью данного кода мы получим первые 5 слов без обрыва в неожиданных местах.

Также для этих целей можно воспользоваться ниже описанной функцией, которая принимает значение строки и количества символов, которые нужно обрезать:
$text = 'Этот текст нужно обработать до определенного количества символов без разрыва слов!';
function textFunc( $str, $maxLen )
{
if ( mb_strlen( $str ) > $maxLen )
{
preg_match( '/^.{0,'.$maxLen.'} .*?/ui', $str, $match );
return $match[0].'...';
}
else {
return $str;
}
}
echo textFunc( $text, 50 ); // Этот текст нужно обработать до определенного...
Данную функцию можно изменить, например, чтобы считало не до символа пробела, а к символу ",". Для этого достаточно изменить регулярное выражение:
preg_match( '/^.{0,'.$maxLen.'};.*?/ui', $str, $match );
Данную функцию можно использовать при выводе результата поиска, или обрезки заголовка и во многих других случаях.

Добавить комментарий

Имя:
Текст комментария: