Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wyróżnienie szukanego ciągu
Forum PHP.pl > Forum > Przedszkole
michu73
Witam! Mój problem: kieruję do bazy standardowe zapytanie (SELECT -- LIKE) o wyszukanie ciągu znaków (np.: szkol). Baza zwraca mi oczywiście ileś tam rekordów z wystąpieniem tego ciągu. I teraz pytanie: czy istnieje prosta możliwość wyróżnienia (np. pogrubienia, zmiany koloru) zadanego ciągu znaków w wyniku (np.: przedszkole).
nospor
tak jest. ale to sie robi po stronie php. tam tez przenosze
Cytat
w wyniku
bo rozumiem, że jako wynik, masz na mysli stronę
Najki
Każdy tekst jaki chcesz z bazy wyświetlić przepuść przez funkcję highlight_string(), której kod masz poniżej. Najlepiej jeśli tekst do podświetlenia zapiszesz w jakiejś zmiennej na stronie, np.: $hl_string. Wtedy możesz przekazać go funkcji, lub odczytać z wnętrza funkcji odwołując się do niego poleceniem global. Przykład:
  1. <?php
  2. $hl_string = 'szkol';
  3.  
  4. function highlight_string ($text)
  5. {
  6. global $hl_string;
  7. $text = str_replace($hl_string, '<span style="color:red">'.$hl_string.'</span>', $text);
  8. return $text;
  9. }
  10.  
  11. echo 'Cześć.<br/><br/>'.highlight_string('Ala skończyła przedszkole i teraz uczy się w szkole (a w domu ma kota).').'<br/><br/>Narazie';
  12. ?>
anopak
Cytat(nospor @ 2006-02-21 09:58:37)
bo rozumiem, że jako wynik, masz na mysli stronę

Cytat(michu73 @ 2006-02-21 09:45:38)
(...)kieruję do bazy standardowe zapytanie(...)


Czyli na moje oko to ma to wynik z zapytania SQL'owego...

Możesz to zrobić po stronie php, jedną z funkcji:
str_replace
preg_replace
ereg_replace

wybierz, to które najwygodniejsze jest dla Ciebie, bądź przy pomocy zapytnia, zwrócić odrazu wynik z podświetlonym tekstem, przykład:

  1. SELECT REPLACE('szkol','<div class="hl">szkol</div>',pole_przeszukiwane)
  2. FROM tabela_przeszukiwana
  3. WHERE pole_przesukiwane LIKE "%szkol%"


Manual MySQL - Replace
michu73
str_replace sprawdza mi się, ale tylko w przypadku dokładnego zapytania, np.: wyróżni "przedszkole", ale juz z "Szkola" sobie nie poradzi (problem roznej wielkosci znakow); natomiast jeśli chodzi o podmiane juz w zapytaniu - sprawa jest nieco skomplikowana, bo wynikiem nie jest stricte łańcuch:

  1. SELECT *
  2. FROM tablica
  3. WHERE 1parametr LIKE '%szkol%' OR 2parametr LIKE '%szkol%' OR 3parametr LIKE '%szkol%'
nospor
Cytat
ale juz z "Szkola" sobie nie poradzi (problem roznej wielkosci znakow)
wrrrr, jak ja nie lubie takich odpowiedzi. a zajrzales chociaz do manuala? to zajrzyj:
http://pl.php.net/manual/pl/function.str-replace.php
masz tam tez link do funkcji, ktora nie uwzględnia wielkosci liter

edit: po to jest manual by zniego korzystać. latanie z każdą popierdułką na forum, na dłuższą metę okaże się dla Ciebie niekorzystne (i nie mam tu na mysli ostrzezen. mam na mysli o radzeniu sobie później w zyciu)

edit2: ale plama. sorry michu, ja ci to moraly jak dla malolata, a tu taka niespodzianka winksmiley.jpg pozatym sam nie doczytalem, str_ireplace jest tylko w php5. moj błąd sad.gif

edit3:
nie znam sie na wyrazeniach, a to tzreba na wyrazniach sklecic, ale zrobilem cos takiego:
  1. <?php
  2. $zm = 'PrzedSzKole';
  3. $zm = preg_replace('/(szkol)/i','<span style="color:red">\\1</span>',$zm );
  4. echo $zm;
  5.  
  6. ?>
mam nadzieję ze się przyda
michu73
W zasadzie chodziło mi o zmienną, więc trochę przerobiłem, Może tak być??

  1. <?php
  2. $zm = preg_replace('/$szukany_ciag/i','<span style="color:red">\\0</span>',$zm);
  3. echo $zm;
  4. ?>


Dzięki za pomoc! Chylę czoła.
nospor
prawie dobrze... ale powinno byc tak:
  1. <?php
  2. $zm = preg_replace("/$szukany_ciag/i",'<span style="color:red">\\0</span>',$zm);
  3. ?>
jakaż drobna, aczkolwiek jak ważna różnica winksmiley.jpg

http://pl.php.net/manual/pl/language.types.string.php
po polsku winksmiley.jpg
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.