all__
Админ
      
Сообщений: 850
Зарегистрирован: 01.2010
|
Как обрезать строку по длине, не нарушая целостности слов?
Есть способы для обрезания размера строки, но при этом строка может оборваться по среди слова.
Код:
<?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'...';
// выведет "Это строка которую..."
?>
Лучшая благодарность - "Мне нравится", +1 или Like! Вверху страницы.
(Последний раз сообщение было отредактировано 29.01.2010 в 18:03, отредактировал пользователь clk824.)
|
|
| 15.01.2010 14:46 |
|
all__
Админ
      
Сообщений: 850
Зарегистрирован: 01.2010
|
RE: Как обрезать строку по длинне, не нарушая целосности слов UTF-8?
Прежние примеры не правильно работают с 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'...';
// выведет "Это строка которую..."
?>
Лучшая благодарность - "Мне нравится", +1 или Like! Вверху страницы.
(Последний раз сообщение было отредактировано 01.05.2010 в 7:54, отредактировал пользователь all__.)
|
|
| 22.01.2010 20:42 |
|
Гость
Unregistered
|
RE: Как обрезать строку по длине, не нарушая целостности слов?
Код:
<?php
function cutString($string, $maxlen) {
$len = (mb_strlen($string) > $maxlen)
? mb_strripos(mb_substr($string, 0, $maxlen), ' ')
: $maxlen
;
$cutStr = mb_substr($string, 0, $len);
return (mb_strlen($string) > $maxlen)
? '"' . $cutStr . '..."'
: '"' . $cutStr . '"'
;
}
$maxlen = 21;
$string = 'Это строка которую нужно урезать';
echo cutString($string, $maxlen);
$string = 'Это строка которую';
echo cutString($string, $maxlen);
$string = 'Это строка';
echo cutString($string, $maxlen);
/* Сравните результаты этих 3 разных строк с своим кодом). Алсо это работает быстрее и корректно с UTF-8. Если у вас другая кодировка - её лучше указывать в функциях mb_*
*/
|
|
| 15.07.2011 18:53 |
|
all__
Админ
      
Сообщений: 850
Зарегистрирован: 01.2010
|
RE: Как обрезать строку по длине, не нарушая целостности слов?
Спасибо за сообщение, добавил скобку.
(13.08.2011 19:04)CRABuk писал(а): Информация помогла, но пропущена ")", поэтому не работало по началу. Надо бы исправить, например, я не сразу нашел, другие тоже могут не заметить.
Код:
? mb_strripos(mb_substr($string, 0, $maxlen), ' ')
Лучшая благодарность - "Мне нравится", +1 или Like! Вверху страницы.
|
|
| 13.08.2011 22:14 |
|
Гость
Unregistered
|
RE: Как обрезать строку по длине, не нарушая целостности слов?
|
|
| 15.04.2012 12:33 |
|