Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Jak zakończyć każdy tekst wielokropkiem
mperlam
post
Post #1





Grupa: Zarejestrowani
Postów: 174
Pomógł: 0
Dołączył: 24.04.2009

Ostrzeżenie: (30%)
XX---


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.


--------------------
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
sadistic_son
post
Post #2





Grupa: Zarejestrowani
Postów: 1 495
Pomógł: 245
Dołączył: 1.07.2009
Skąd: Bydgoszcz

Ostrzeżenie: (0%)
-----


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);


--------------------
Uśpieni przez system, wychowani przez media,
Karmieni zmysłami, próżnymi żądzami...

-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Jesteś zbyt leniwy, żeby się zarejestrować? Ja jestem zbyt leniwy aby Ci pomóc!
-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
Go to the top of the page
+Quote Post
Crozin
post
Post #3





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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. }
Go to the top of the page
+Quote Post
mperlam
post
Post #4





Grupa: Zarejestrowani
Postów: 174
Pomógł: 0
Dołączył: 24.04.2009

Ostrzeżenie: (30%)
XX---


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.


--------------------
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
pyro
post
Post #6





Grupa: Zarejestrowani
Postów: 2 148
Pomógł: 230
Dołączył: 26.03.2008

Ostrzeżenie: (0%)
-----


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).'...';


--------------------
ET LINGUA EIUS LOQUETUR IUDICIUM
Go to the top of the page
+Quote Post
Kamil Pietrzak
post
Post #7





Grupa: Zarejestrowani
Postów: 213
Pomógł: 10
Dołączył: 7.01.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


  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"
Go to the top of the page
+Quote Post
Crozin
post
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


@Kamil Pietrzak: O preg_split słyszał?
Go to the top of the page
+Quote Post
Kamil Pietrzak
post
Post #9





Grupa: Zarejestrowani
Postów: 213
Pomógł: 10
Dołączył: 7.01.2010
Skąd: Lublin

Ostrzeżenie: (0%)
-----


wiedzialem ,ze taka funkcja istnieje na 99%, ale z nazwy nie znalem:P
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:51