Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: preg_replace (arrays)
Forum PHP.pl > Forum > PHP
Blackhole
Hej!
Chcę podświetlać znalezione przez wyszukiwarkę komentrzy frazy, będące szukanymi ciągami. Wyszukiwarka oparta jest na indeksie FULLTEXT i wykorzystuje 'BOOLEAN MODE'. Znajduje więc ciągi nie zważając na wielkość liter.
Mam kod:
  1. $srch = explode(" ",$_POST['searchString']); // rozbij zapytanie na fragmenty
  2. for ($ssi=0; $ssi<count($srch); $ssi++) // usuń operatory
  3. $srch[$ssi] = trim($srch[$ssi], "-+()\"<>");
  4. $rpl = $srch;
  5. for ($ssi=0; $ssi<count($srch); $ssi++) {
  6. $srch[$ssi] = "#".$srch[$ssi]."#i"; // 'pattern' elementu do podświetlenia
  7. // $rpl[$ssi] = '<span class="hl_found">'.$rpl[$ssi]."</span>"; // *1*
  8. $rpl[$ssi] = "<span class=\"hl_found\">$1</span>"; // *2* (kod HTML dający efekt podświetlenia)
  9. }
  10. echo preg_replace($srch, $rpl, $tresc); // wyświetlenie z podświetlonymi znalezionymi wyrazami
Mój problem polega na tym, że obecny kod nie podświetla znalezionych wyrazów, lecz je usuwa. Gdy jednak dam do uruchomienia linię oznaczoną *1* zamiast *2*, to podświetlanie działa, ale poza podświetleniem dostaje też zmieniona wielkość liter w podświetleniu na taką, jaka została używa w zapytanie (w $_POST['searchString'). Np.:
- jeśli wyszukuję ciąg Mama i zostanie znaleziony komentarz ($tresc) zawierająca ciąg mama, to podświetlenie zostanie dodane i mama zmieni się na Mama. Tej zmiany wielkości liter nie chcę.
Co proponujecie?
Fifi209
użyj preg_replace_callback
Blackhole
Hehe biggrin.gif Wystarczyło zmienić w linii *2* $1 na $0 sciana.gif
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.