|
|
|
| Есть текст, находящийся в переменной $text. Длина этого текста неизвестна - может быть, только одна буква, а может несколько сотен. И из этого текста нужно взять первые сто знаков, включая пробелы. Вроде бы, это не сложно, но ведь может случиться так, что конец этой выборки разрубит последнее слово на части, а это уже нехорошо... Но и автоматически отбрасывать последнее слово из опасения того, что оно является неполным, тоже неверно - а вдруг оно уместилось?
Вот я и думаю - как выбрать из переменной $text целые слова, находящиеся в пределах 100 знаков? | |
|
|
|
|
|
|
|
для: Владимир55
(12.03.2007 в 10:29)
| | експлодом разделите этот текст на слова и отбирайте первые несколько входящие по сумме символов в ваш интервал, это так навскидку... | |
|
|
|
|
|
|
|
для: KPETuH
(12.03.2007 в 10:37)
| | эксплодом не выйдет - разделителями слов вполне могут быть не ток пробелы, но и точки-тире-запятые и много чего другого... | |
|
|
|
|
|
|
|
для: ZuArt
(12.03.2007 в 10:48)
| | с одной стороны согласен не очень хорошо с другой стороны в грамотно набитом тексте после знаков припенания всегда стоят пробелы :) | |
|
|
|
|
|
|
|
для: KPETuH
(12.03.2007 в 11:07)
| | угу... ток опять-же если после последнего слова стоит знак препинания, который делает это слово неуместимым, то оно обрежется, а могло аккурат в тему... =) | |
|
|
|
|
|
|
|
|
для: Trianon
(12.03.2007 в 10:44)
| | Ссылочка прямо для меня! Спасибо!
Но остались два маленьких нюанса.
1. В начале текста могут быть пробелы, и желательно их исключить. Если я поставлю такую функцию,
$q = ltrim ($q1);
это нормально?
2. Добавление слов "Подробнее", ради которого изначально и писался код в ссылке, мне не нужно. Как мне от него освободиться? Просто убрать слово ".. подробнее", слив вместе кавычки? Или есть более корректное решение?
============
Оригинал текста в ссылке (чтобы вам лишний раз не кликать):
$q = 'Ребята подскажите какими строковыми функциями и как можно сделать так,
чтобы мини новости (новостная лента) на сайте вырезались не побуквенно,
а пословно. Ну я имею в виду как сделать так чтобы Когда я в своем скрипте
добавляю новости, в новостную ленту добавллось автоматически Первые слова,
а потом там как у всех "подробнее..."
Никак не могу ничего придумать';
;
$num = 100;
$r = preg_match("/^([\s\S]{1,$num})(?=([\s]|$))/", $q, $r) && $r[2] ? ($r[1] .'... подробнее') : $q;
echo nl2br($r); | |
|
|
|
|
|
|
|
для: Владимир55
(12.03.2007 в 13:13)
| |
($r[1] .'... подробнее')
($r[1] .'')
($r[1])
$r[1]
|
$r = preg_match("/^([\s\S]{1,$num})(?=([\s]|$))/", $q, $r) && $r[2] ? $r[1] : $q;
|
| |
|
|
|
|
|
|
|
для: Trianon
(12.03.2007 в 13:26)
| | Вот еще могу предложить, правда без рег. выражений.
<?php
// обрезает до заданной длинны, до первого пробела
//$limit --- до какой длинны обрезаем
//$input_str --- строка на входе
$input_str = "Оформилась приблизительно в 2000 году, по другой версии — в 1997. Позиционируется как контркультурна";
function strok_limit($input_str,$limit)
{
//$limit до какой длинны обрезаем
$str_lenght = strlen($input_str);
if ($str_lenght > $limit)
{
$str = substr($input_str,0,$limit);
$pos = strrpos($str, " ");
if (!isset($pos))
{$str = "....";}
else
{$str = substr($str,0,$pos); $str = $str."....";}
}
return $str;
}
echo strok_limit($input_str,14)."<br>\n";
print (strok_limit($input_str,45));
?>
|
| |
|
|
|