all__
Админ
Сообщений: 875
Зарегистрирован: 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__
Админ
Сообщений: 875
Зарегистрирован: 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__
Админ
Сообщений: 875
Зарегистрирован: 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: Как обрезать строку по длине, не нарушая целостности слов?
Народ, давайте не будем изобретать велосипед.. в mb_ функции есть параметр кодировка. Если у хостера нет этой функции пишите в саппорт.
mb_substr($str, 0, 3, 'UTF-8');
все написано в мануале http://ru2.php.net/manual/ru/function.mb-substr.php
|
|
15.04.2012 12:33 |
|
Гость
Unregistered
|
RE: Как обрезать строку по длине, не нарушая целостности слов?
function cutString($string, $maxlen)
{
if(strlen($string) <= $maxlen)
return $string;
return implode(preg_split('/(.{1,'.$maxlen.'})(?:\s|$)|(.{'.$maxlen.'})/uS', $string, 1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE)).'...';
}
|
|
21.09.2012 15:13 |
|
Гость
Unregistered
|
RE: Как обрезать строку по длине, не нарушая целостности слов?
$string = 'Строка которую обрезаем';
$length = 20 // длина до которой обрезаем
$string = preg_replace('/-[^\s]*$/', '', substr($string, 0, $length));
(05.02.2013 12:19)Гость писал(а): Точнее:
$string = 'Строка которую обрезаем';
$length = 20 // длина до которой обрезаем
$string = preg_replace('/\s[^\s]*$/', '', substr($string, 0, $length));
(05.02.2013 12:19)Гость писал(а): $string = 'Строка которую обрезаем';
$length = 20 // длина до которой обрезаем
$string = preg_replace('/-[^\s]*$/', '', substr($string, 0, $length));
(05.02.2013 12:19)Гость писал(а): Точнее:
$string = 'Строка которую обрезаем';
$length = 20 // длина до которой обрезаем
$string = preg_replace('/\s[^\s]*$/', '', substr($string, 0, $length));
Еще точнее
$string = preg_replace('/\s[^\s]+$/', '', substr($string, 0, $length));
|
|
05.02.2013 12:19 |
|
Гость
Unregistered
|
RE: Как обрезать строку по длине, не нарушая целостности слов?
а как в таком коде реализовать обрезку?)
<?php
$xmlFile = 'xml/testimonials.xml';
$xslFile = 'xml/transform.xml';
$doc = new DOMDocument();
$xsl = new XSLTProcessor();
$doc->load($xslFile);
$xsl->importStyleSheet($doc);
$doc->load($xmlFile);
echo $xsl->transformToXML($doc);
?>
|
|
25.10.2013 9:09 |
|