Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Zaznaczanie odnalezionych słów
Forum PHP.pl > Forum > Przedszkole
Trejder
Witam serdecznie!

Potrzebuję prostej procedury, która w zadanym łańcuchu tekstu wszystkie wystąpienia danego słowa oznaczy w jakiś sposób (na przykład zmieni im tło na żółte). W tym celu napisałem taką banalną procedurę:

  1. <?php
  2. function highlight($tresc, $what)
  3. {
  4.  $tresc = str_ireplace($what, '<span style="background-color: #ffff80">'.$what.'</span>', $tresc);
  5.  
  6.  return $tresc;
  7. }
  8. ?>


Zastosowałem str_ireplace(), aby wyszukiwał wszystkie wystąpienia zadanego wyrazu, niezależnie od tego, co użytkownik zapoda jako $what.

To rozwiązanie działa, ale nie do końca tak, jakbym tego chciał. Mi zależy na tym, żeby funkcja służąca do podkreślania wskazanych wyrazów odszukała je wszystkie (niezależnie od wielkości liter - tak, jak robi to teraz) ale żeby przy oznaczaniu nie zmieniała wielkości liter w odnalezionych wyrazach.

Na przykładzie - żeby było jaśniej:

Jeśli użytkownik poda "TEST", to powyższa funkcja znajdzie mi zarówno "test", "Test", "TEST" i każdą inną kombinację. Ale przy oznaczaniu jej (w powyższy sposób) wstawi to, co użytkownik podał - czyli w tym przypadku "Test". Jeśli odnaleziony wyraz będzie w środku zdania, to efekt będzie dość żałosny, np.: "Przeprowadziliśmy gruntowny TEST programu".

Mi zaś chodzi o to, aby funkcja ta odnalazła wszystkie możliwe kombinacje liter, ale już przy podkreślaniu odnalezionych wyrazów pozostawiła taką wielkość liter, jaką odnalazła.

Czyli w zdaniu "Przeprowadziliśmy gruntowny test programu" wyraz "test" ma mieć tło żółte i niezmienioną wielkość liter niezależnie od tego, czy użytkownik wpisze "test", "Test", "TEST", czy może "TeSt".

Coś mi się wydaje, że do tego trzeba napisać trochę bardziej rozbudowaną funkcję szukająco-zamieniającą i nie da się tego zrobić w jednej linijce, jak ja próbowałem powyżej.

Z góry dziękuję za wszelką pomoc w tej sprawie,
Trejder
scrat
może spróbuj tego

  1. <?php
  2. function highlight($tresc, $what)
  3. {
  4. return preg_replace("/($what)/i", '<span style="background-color: #ffff80">1</span>', $tresc);
  5. }
  6. ?>
Trejder
Cytat(scrat @ 12.09.2007, 19:57:20 ) *
może spróbuj tego


Bardzo dziękuję - to rozwiązało mój problem! Dzięki, dzięki, dzięki! smile.gif
Trejder

EoT
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-2024 Invision Power Services, Inc.