dimarina.ru

html, css и javascript1   Разное1   Рецепты программирования на PHP или практические советы по программированию7   Управление проектом1  

 

Рецепты программирования на PHP или практические советы по программированию → Красивое обрезание заголовков

Довольно часто возникает задача из текста страницы сделать аннотацию длиной не более X-символов. Например, чтобы разместить анонсы новостей на главной странице сайта.

С первого взгляда довольно простая задача становится не такой уж простой, если вникнуть детально.

Совершенно ясно, что слова разрывать нельзя. Для этого мы с самого начала фразу разбиваем на отдельные слова. Теги мы тоже не учитываем, хотя,

надо подумать что будет если сразу по тексту идет таблица, которая для аннотации вряд ли представляет интерес.

"Обрезанная" фраза может закончится на знаки припинания, например, вопросительный, восклицательный, запятую и т.п.

Писать фразу вида "А теплый ли был день?..." будет не красиво. Поэтому, такие варианты надо обрабатывать.

Я неоднократно возвращался к переписанию и усовершенствованию этой функции и думаю, еще не раз возвращусь.

Ниже приведу одну из последний версий функции красивого обрезания фраз.

1 function cut($str,$len 100) {
2     //разбиваем строку на отдельные слова. Каждое слово помещаем в массив отдельным элементом
3     $words preg_split('/([^A-zА-я0-9\.,:\?!]+)/',$str,-1,PREG_SPLIT_NO_EMPTY);    
4     //если кол-во слов меньше трех, то возвращаем исходную строку
5     if(!is_array($words) || count($words)) < return $str;
6     $llen strlen(implode(" ",$words));    
7     
8     //если полученная длина "чистых" слов больше заданной длины обрезания, то обрезаем...
9     if($llen $len){        
10         $out FALSE;
11         if(!$words) {
12             foreach($words as $k=>$v) {
13                 if(strlen($out) < $len$out.=" ".$v;
14                 else break; 
15             }
16             $out trim($out);
17             $l strlen($out)-1;
18             //смотрим, на что оканчивается обрезанная фраза
19             if(in_array($out{$l},array(".","?","!"))) return $out;
20             //если окончание - запятая, двоеточие, точка с запятой, то заменяем этот знак на многоточие
21             elseif(in_array($out{$l},array(",",":",";"))) return substr($out,0,strlen($out)-1)."&hellip;";
22             //иначе просто многоточие
23             else return $out."&hellip;";
24         }
25     }
26     return $str;
27 }

Комментарии:

21.07.2016 → Xadrian написал:
Thanks so much. I even have a post it on my desk that says &#8220;No Doesn&#8217;t Hurt.&#8221; It&#8217;s just so&m2nee#8o17;s opinion. And there certainly qualities of rejection. When agents comment and even offer advice, that means that the author was damned close.

19.10.2012 → nmvxcw написал:
3ZVecJ , [url=http://upitybwnayke.com/]upitybwnayke[/url], [link=http://stworvejqdsv.com/]stworvejqdsv[/link], http://lwdxfwqhmfgt.com/

19.10.2012 → Денис написал:
Извините, не сдержался. Уже примерно 30-й подобный пост просматриваю. Ну всё написали. И для чего, и код прокомментирован. Но что куда вставлять в коде?. И сам его куда? Ну хоть пример же покажите кто-нибудь же, ну!

16.10.2012 → xjysjexnsd написал:
jby0m2 <a href="http://xjcsjdywidvr.com/">xjcsjdywidvr</a>

15.10.2012 → ulwnoqubm написал:
4uZeLI , [url=http://iwpzxwhsvzgl.com/]iwpzxwhsvzgl[/url], [link=http://ysafgupdcofa.com/]ysafgupdcofa[/link], http://ollhpvxtnxxg.com/

15.10.2012 → vdhifvfbnjz написал:
o2EUop <a href="http://kbtpsejmptnw.com/">kbtpsejmptnw</a>

14.10.2012 → Remus написал:
So that's the case? Quite a revetlaion that is.

Написать комментарий





Включите отображение картинок в браузере
Число на картинке: