Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: System newsów - automatyczne skracanie newsa
Forum PHP.pl > Forum > PHP
MatheW
Piszę system newsów i chcę by gdy news wyświetlany był na stronie głównej, to był ucinany - powiedzmy po 400 znakach, ale tak, żeby nie ciął w połowie znaczników HTML lub BBCODE. Bo przypuśćmy, ze w okolicach 400 znaków będzie takie oto coś -
Cytat
costam costam <a href //ciach - 400 znak// ="costam.html">
To wtedy w fragmencie na stronie głównej będziemy mieli costam costam <a href , co oczywiscie nie jest dopuszczalne.

Nie mam pomysłu jak sie za to zabrać. Czy może ktoś z Was mi pomóc, naprowadzić na rozwiązanie?
popo
proponuje uzyc wyrazen regularnych (cos mi swita ze na forum bylo to juz omawiane ale nie mam pewnosci)
MatheW
Nie moglem znaleść.. ale poradziłem sobie z samymi znacznikami i ucinam w dobrym miejscu. Natomiast mam teraz inny algorytmiczny kłopot.

Chciałbym, aby ten news był ucinany po 600 znakach, ale takich, które będą widoczne dla uzytkowniika czyli bez tagów. Oczywiście można zrobić strip_tags i tagów nie ma, wtedy policzy sie znaki i zwróci miejsce w ciągu, w którym winno się uciąć. No mamy pozycję, ale samych słów, bez tagów. Jak zrobić tak, zeby po 600 znakach tekstu, ale żeby wepchać tam tagi?
Yacho
wyrazeniem regularnym lapiesz wszystkie tagi do 600 znaku, po rym sprawdzasz ilosc znakow w "wylapanych tagach..." i tniesz tekst po 600+ ilosc wypalanych....
ja jednak zrobilbym znacznik [CUT] ktory user moglby sam ustawic gdzie by chcil i okreslil jego domyslna pozycje po x znakach...

inny sposob mi wpadl do glowy wlasnie :

w pierwszych 600 znakach matchujesz znaki alfanumeryczne + interpunkcje + kropki (czyli 1 slowem tekst) zwracasz sobie dlugosc tego tekstu jesli jest mniejza od 600 to tniesz po 600 + tyle ile mniejsza lub po 600 + miejsce do taga konczacego
blackjohn
Witam. Mam dokładnie ten sam problem ale nie jestem zbyt zaawansowanym programistą w PHP. Czy mógł by ktoś napisać lup podać namiary na taki skrypt który wyświetli mi po wiedzmy 200 znakowy text nie uwzględniając tagów html? Będe dozgonnie wdzięczny.
Pilsener
Lepiej skracać do całych słów:
  1. <?php
  2. function skracaj_text($str, $limit = 100, $end_char = '…') {
  3.  if (trim($str) == '')
  4. return $str;
  5. preg_match('/s*(?:S*s*){'. (int) $limit .'}/', $str, $matches);
  6. if (strlen($matches[0]) == strlen($str))
  7. $end_char = '';
  8.  return rtrim($matches[0]) . $end_char;
  9.  }
  10. ?>
- znalazłem w manualu. Jak ktoś chce może przerobić, żeby liczyć znaki zamiast słów.
MWL
A ja dam prostszą metodę, może można się pozbyć znaków html'a??
Nie sadzę by w skrócie było to nie wiadomo jak potrzebne...
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.