Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zaznaczanie odnalezionych słów, Prośba o pomoc w korekcie funkcji źle oznaczającej znalezione słowa
-Trejder-
post 12.09.2007, 19:28:17
Post #1





Goście







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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
scrat
post 12.09.2007, 19:57:20
Post #2





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 22.07.2007

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


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. ?>
Go to the top of the page
+Quote Post
-Trejder-
post 13.09.2007, 08:43:52
Post #3





Goście







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
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 Wersja Lo-Fi Aktualny czas: 19.07.2025 - 10:17