Projektowanie stron WWW od podszewki

Artykuły na każdy temat

[PHP] Jak obciąć tekst po określonej liczbie znaków i dodać na końcu ...?

Dodano 22.02.2010r. o 01:32
Z początku miałem wrzucić dwie funkcje lecz po chwili rozmysłu i walki z wiatrakami doszedłem do wniosku, że to nie dla mnie. Pierwsza funkcja, która zostanie zaprezentowana ma małą niedoróbkę. Chodzi o to, że po podzieleniu ciągu i dodaniu trzech kropek na końcu długość stringu wychodzi nieco większa niż ta podana w drugim parametrze funkcji. Natomiast funkcja ma jedna zaletę. Nie ucina słowa w połowie. Moja funkcja miała robić to samo oraz ucinać ciąg tak ażeby nie przekraczać określonej ilości znaków razem z wielokropkiem, który miał być dodawany w zależności co się pojawiło na końcu obciętego ciągu. Mam tutaj na myśli takie wymysły jak: ..., ., ?, !, ?!, !?, ?!?, !?!, !!!, ???, itp.
Kod:
<?php
$str 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus sapien nisl, sollicitudin non, imperdiet ac, rhoncus sed, urna. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer nisl. Quisque gravida.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed euismod ultrices nulla. Aenean eros. Cras sit amet libero in ipsum lacinia feugiat. Ut dictum, dui ut rutrum tempor, odio mi rutrum lorem, sed iaculis purus metus nec turpis. Donec dignissim lectus et sapien. Sed molestie feugiat dui. Etiam dapibus varius risus. Mauris arcu mauris, interdum sit amet, malesuada sed, iaculis a, libero. Donec elementum nisi ac turpis. In hac habitasse platea dictumst. Aenean a massa non mauris cursus varius. Vivamus at ante. Aenean non urna sed est lobortis malesuada.';

function shortcut($str$length)
{
 $tmp['length'] = strlen($str);

 if($tmp['length'] > $length)
 {
  while($str[$length] != ' ' && ++$length $tmp['length']);

  return substr($str0$length).'...';
 }
 else
 {
  return $str;
 }
}

echo shortcut($str60);
?>
W aktualnościach na swojej stronie stosuje takie oto cudo:
Kod:
<?php
$str 'Lorem ipsum dolor sit amet, consectetuer adipiscing elit[cut]. Phasellus sapien nisl, sollicitudin non, imperdiet ac, rhoncus sed, urna. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Integer nisl. Quisque gravida.Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Sed euismod ultrices nulla. Aenean eros. Cras sit amet libero in ipsum lacinia feugiat. Ut dictum, dui ut rutrum tempor, odio mi rutrum lorem, sed iaculis purus metus nec turpis. Donec dignissim lectus et sapien. Sed molestie feugiat dui. Etiam dapibus varius risus. Mauris arcu mauris, interdum sit amet, malesuada sed, iaculis a, libero. Donec elementum nisi ac turpis. In hac habitasse platea dictumst. Aenean a massa non mauris cursus varius. Vivamus at ante. Aenean non urna sed est lobortis malesuada.';

echo (is_int($tmp['pointer'] = strpos($str'[cut]')) ? substr($str0$tmp['pointer']).'...' $str);
?>
W ten sposób mam większą kontrolę nad tym, w którym momencie ucinam ciąg. W odpowiednim momencie daję tylko [cut] i sprawa załatwiona.

Więcej informacji na:
http://php.net/manual/pl/function.is-int.php
http://php.net/manual/pl/function.strlen.php
http://php.net/manual/pl/function.strpos.php
http://php.net/manual/pl/function.substr.php

Komentarze

Publikowane komentarze są prywatnymi opiniami użytkowników serwisu. Serwis nie ponosi odpowiedzialności za treść opinii. W trosce o zachowanie poziomu dyskusji wszystkie komentarze podlegają akceptacji przed ich publikacją dlatego proszę cierpliwie czekać aż komentarz zostanie opublikowany.

CapaciousCore

Dodano 03.06.2010r. o 13:49
Dzieki melma.pl za poinformowanie o literówce.

melma.pl

Dodano 22.05.2010r. o 23:10
W funkcji jest mała literówka, przez co zawsze doklejane będzie '...'. Wystarczy poprawić lenght na length i będzie dobrze.

Dodaj komentarz

Zostaw komentarz jeżeli możesz! Nie bądź przysłowiowym botem! Nie bądź obojętny! Ciebie to nic nie kosztuje, a mi sprawi uśmiech na twarzy.
Zezwolono używać: BBCode
Zabroniono używać:
znaczników HTML

(Wymagany)

(Wymagany, niepublikowany)

(Nie wymagana)

Token:

Obrazek dla bota

(Przepisz tylko cyfry!)

(Wymagana)