Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Jak zakończyć każdy tekst wielokropkiem
Forum PHP.pl > Forum > Przedszkole
mperlam
Cześć. Mam dość nietypową sytuację, chciałbym zrobić odpowiednią funkcję. Mam trzy przykładowe teksty (podaję tylko ich końcówki):

  1. Ala ma kota i telewizor
  2. Ala ma kota i telewizor. </a>
  3. Ala ma kota i telewizor.</a>
  4. Ala ma kota i telewizor </a>
  5. Ala ma kota i telewizor</a>


Chcę osiągnąć coś takiego, aby zaraz po ostatnim wyrazie (czy to z kropką czy bez) na samym końcu były trzy kropki bez spacji ale nadal chcę zachować tagi jeżeli takowe występują. Efekt ma być zatem taki:

  1. Ala ma kota i telewizor... (Efekt dla pierwszego przykładu)
  2. Ala ma kota i telewizor...</a> (Efekt dla pozostałych przykładów)


Bardzo proszę o pomoc w osiągnięciu efektu, dodam, że tagi na końcu mogą być różne.
sadistic_son
To zalezy czy teksty sa rozne, jak je od siebe oddzielasz itp. Za malo informacji podales. Dla powyzszego przykladu wystarczy takie cos:
  1. str_replace("telewizor","telewizor...",$teksty);
Crozin
1. Jak wielokropek to wielokropek, czyli nie "...", a "…".
2. Zakładam, że masz każde zdanie dostępne osobno, wtedy wystarczy sprawdzić czy kończy się ono jakimś znakiem interpunkcyjnym typu (., ?, !), jeżeli tak usunąć go po czym dodać znak wielokropka.
3. Jeżeli te zdania są połączone trzeba je w jakiś sposób rozdzielić, a dalej to już tylko powyższe punkty.
4. Jeżeli ten wielokropek ma pełnić wyłącznie rolę dekoracyjną na stronie WWW to możesz skorzystać z CSSa - a wręcz powinieneś.
  1. a:after { /* ewentualnie inny selektor + selektor :after */
  2. contnet: "…";
  3. }
mperlam
Cytat(sadistic_son @ 23.11.2010, 19:56:25 ) *
To zalezy czy teksty sa rozne, jak je od siebe oddzielasz itp. Za malo informacji podales. Dla powyzszego przykladu wystarczy takie cos:
  1. str_replace("telewizor","telewizor...",$teksty);


Twój przykład zwórciłby:

  1. Ala ma kota i telewizor....</a>;


Czyli o kropkę za dużo... Cały problem mam tutaj w tym jak wykryć co jest na końcu tekstu. Crozin, Twój przykład również owocuje podobnym efektem, poza tym co jeżeli dany tekst występuje w tekście dwa razy? Napisałem, że to długi ciąg a nie jedno zdanie.
Crozin
Napisałem, że trzeba sprawdzić co jest na końcu zdania. Pokaż jakie masz dane wejściowe i jak próbowałeś to zrobić do tej pory.
pyro
Najprościej wyrażeniami regularnymi. Wiem, że źle robię podając gotowca, ale mówi się trudno smile.gif

  1. $text = 'Ala ma kota.';
  2.  
  3. $edited_text = preg_replace('|\.+$|s', '', $text).'...';
Kamil Pietrzak
  1. $text = '<a href="#">telewizor</a>';
  2.  
  3. $text_bez_htmla = strip_tags($text);
  4.  
  5. $text_z_kropkami = str_replace($text_bez_htmla, $text_bez_htmla.'...', $text);


zadziała tylko, jeśli jest jeden tekst

mozesz napisac funkcje zamianiajaca kazdy "<*>" na "f8yubs2834"
potem to rozdzielic, uzywajac explode('f8yubs2834', $text)

wtedy kazdy tekst bedziesz mial w osobnym indeksie tablicy
uzyjesz str_replace jak wyzej i gitara

* nie zadziala jak w teksie przypadkiem bedziesz mial ciag "f8yubs2834"
Crozin
@Kamil Pietrzak: O preg_split słyszał?
Kamil Pietrzak
wiedzialem ,ze taka funkcja istnieje na 99%, ale z nazwy nie znalem:P
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.