ФОРУМ.ugoo.ru

Полная веpсия: Как обрезать строку по длине, не нарушая целостности слов?
Вы просматриваете yпpощеннyю веpсию форума. Пеpейти к полной веpсии.

all__


49306956

Есть способы для обрезания размера строки, но при этом строка может оборваться по среди слова.
Код:
<?php
$string = 'Это строка которую нужно урезать';
$string =  substr($string, 0, 21);
echo $string;
// выведет "Это строка которую ну"
?>

Не совсем информативно.
Поэтому, нужно организовать возможность отсечь строку сохраняя целостность слов.
Вот один из вариантов:
Код:
<?php
$string = 'Это строка которую нужно урезать';
$string = implode(array_slice(explode('<br>',wordwrap($string,21,'<br>',false)),0,1));
echo $string;
// выведет "Это строка которую"
?>

Может потребоваться, поставить многоточие в конце строки, если ее порезало, на этот случай код придется немного изменить.
Код:
<?php
$string = 'Это строка которую нужно урезать';
$result = implode(array_slice(explode('<br>',wordwrap($string,21,'<br>',false)),0,1));
echo $result;
if($result!=$string)echo'...';
// выведет "Это строка которую..."
?>
Прежние примеры не правильно работают с UTF-8 но хорошо справляются с CP1251.

Я так и не разобрался как сделать грамотно, поэтому сделал как проще.
Вот пример, обрезания строки UTF-8 по словам:

Код:
<?php
$string = 'Это строка которую нужно урезать';
$result = iconv("utf-8", "windows-1251", $string);
$result = implode(array_slice(explode('<br>',wordwrap($result,21,'<br>',false)),0,1));
$result = iconv("windows-1251","utf-8", $result);
echo $result;
if($result!=$string)echo'...';
// выведет "Это строка которую..."
?>
URL ссылки