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ę:
<?php function highlight($tresc, $what) { $tresc = str_ireplace($what, '<span style="background-color: #ffff80">'.$what.'</span>', $tresc); return $tresc; } ?>
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