Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] substr z zaokrągleniem do pełnego wyrazu
Forum PHP.pl > Forum > Przedszkole
mpps
witam,
chcę skrócić wyświetlany tekst do określonej ilości znaków lecz tak, aby ostatni wyraz z powstałego ciągu nie został 'obcięty'.
mam już skrypt wykonujący obcięcie oryginalnego tekstu - brakuje mi jedynie funkcji, która by nie pozwoliła na 'skrócenie' ostatniego wyrazu do nieczytelnej postaci kilku liter:
  1. <?php
  2. $opis = 'tekst jest zbyt długi do wyświetlenia';
  3. if(strlen($opis) > 20){
  4. echo substr($opis,0,20).'...'; //wynik: tekst jest zbyt dług...
  5. }
  6. else{
  7. echo $opis;
  8. }
  9. ?>

ma ktoś pomysł?
liczy się każdy winksmiley.jpg
wipo
  1. <?php
  2. $opis = 'tekst jest zbyt długi do wyświetlenia';
  3. $ile=strpos($opis," ",20);
  4. //górna granica jak wyraz jest naprawde duży
  5. if ($ile>30) $ile=20;
  6. // jak nie znajdzie spacji
  7. if (!is_numeric($ile)) $ile=20;
  8.  
  9. if(strlen($opis) > 20){
  10. echo substr($opis,0,$ile).'...'; //wynik: tekst jest zbyt dług...
  11. }
  12. else{
  13. echo $opis;
  14. }
  15. ?>
mpps
działa super,
problem występuje, jeśli dane są pobrane z bazy danych
  1. <?php
  2. $opis = record[1]  //przypisanie do zmiennej danych pobranych z tabeli
  3. ?>

pojawia się błąd [...]Offset not contained in string
mike
A ja polecam:
  1. <?php
  2. /**
  3.  * Purpose: Truncate a string to a certain length if necessary,
  4.  *  optionally splitting in the middle of a word, and
  5.  *  appending the $etc string.
  6.  * @param string
  7.  * @param integer
  8.  * @param string
  9.  * @param boolean
  10.  * @return string
  11.  */
  12. function truncate($string, $length = 80, $etc = '...', $break_words = false)
  13. {
  14. if ($length == 0)
  15. return '';
  16.  
  17. if (strlen($string) > $length) {
  18. $length -= strlen($etc);
  19. if (!$break_words)
  20. $string = preg_replace('/s+?(S+)?$/', '', substr($string, 0, $length+1));
  21.  
  22. return substr($string, 0, $length).$etc;
  23. } else
  24. return $string;
  25. }
  26.  
  27. ?>

(rodem ze Smarty'ego)

P.S.
Proszę poprawić tytuł wątku zgodnie z zasadami pisania na forum Przedszkole.
W przeciwnym wypadku zostanie on zamknięty.
mpps
wyborne guitar.gif
dzięki smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.