Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Obcinanie tekstu z HTMLem
Forum PHP.pl > Forum > PHP
wujek2009
Cześć.

Czy jest może gotowa biblioteka, która będzie mi ucinała tekst (za pomocą np. substr) - tylko ważna informacja: w tekście są fragmenty htmlu, więc nie chciałbym aby ucięło w złym momencie i w konsekwencji powstał błąd składniowy i strona mi się rozsypała.

Wiem, że alternatywą byłoby użycie strip_tags (na usunięcie HTMLa) i wówczas cięcie, ale interesuje mnie jednak opcja przy zachowaniu kodu HTML.
magnus
Z html-em będzie ciężko, bo możesz mieć jakiś znacznik otwarty na początku a zamknięty na końcu i jak nie utniesz, to się nie będzie zgadzać.
Nie znam żadnej gotowej funkcji na to, ale może lepiej ucinać to już po stronie klienta, np. wykorzystując CSS i właściwość 'overflow'.
sebastian.rozmus
  1. function truncateHTML($html, $length)
  2. {
  3. $truncatedText = substr($html, $length);
  4. $pos = strpos($truncatedText, ">");
  5. if($pos !== false)
  6. {
  7. $html = substr($html, 0,$length + $pos + 1);
  8. }
  9. else
  10. {
  11. $html = substr($html, 0,$length);
  12. }
  13.  
  14. preg_match_all('#<(?!meta|img|br|hr|input\b)\b([a-z]+)(?: .*)?(?<![/|/ ])>#iU', $html, $result);
  15. $openedtags = $result[1];
  16.  
  17. preg_match_all('#</([a-z]+)>#iU', $html, $result);
  18. $closedtags = $result[1];
  19.  
  20. $len_opened = count($openedtags);
  21.  
  22. if (count($closedtags) == $len_opened)
  23. {
  24. return $html;
  25. }
  26.  
  27. $openedtags = array_reverse($openedtags);
  28. for ($i=0; $i < $len_opened; $i++)
  29. {
  30. if (!in_array($openedtags[$i], $closedtags))
  31. {
  32. $html .= '</'.$openedtags[$i].'>';
  33. }
  34. else
  35. {
  36. unset($closedtags[array_search($openedtags[$i], $closedtags)]);
  37. }
  38. }
  39.  
  40.  
  41. return $html;
  42. }


Funkcja znaleziona w necie wink.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.