Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Kolorowanie tekstu - preg_replace
Forum PHP.pl > Forum > PHP
MakS
Jestem w trakcie robienia wyszukiwarki, która ma kolorować wyszukiwany tekst i niestety nie mogę sobie z tym poradzić. Zrobiłem coś takiego.
  1. $tresc = preg_replace('/'.$fraza.'/i', '<span style="background-color: red">\\1</span>', $tresc);


ale to zamiast kolorować "fraze" to ja kasuje, mógłby mi ktoś to poprawić i wytłumaczyć dlaczego to jest źle, czytałem artykuły o wyrażeniach regularnych ale nie mogę sobie z tym poradzić.
piotr94
bo z tego co tutaj widzę to zastępujesz każde wyszukanie frazy $fraza na "\1" na tle czerwonym ;-)
spróbuj tak:
  1.  
  2. $tresc = preg_replace('/'.$fraza.'/i', '<span style="background-color: red">'.$fraza.'</span>', $tresc);
MakS
Tylko jak dam tak jak podałeś, to jeśli szukana fraza to np. "dom" a w tekście mam "Dom" i wtedy mi to znajduje, bo szukam z pominięciem wielkości liter, ale już zamienia mi to na "dom" na tle czerwonym a chciałbym żeby tekst pozostawał bez zmian tylko był na czerwonym tle.
mad/
ja bym to przechwycił za pomocą nawiasów:
i radzę wyescapeować wszystkie znaki specjalne z frazy. , bo już mamy tu podatność na ataki. niegroźne ale jeśli fraza byłaby: 'tekst frazy (php)', już mamy problem.
$tresc = preg_replace('/('.$fraza.')/i', '<span style="background-color: red">\\1</span>', $tresc);
piotr94
Mam pomysł na rozwiązanie:
1. Kopiujesz oryginalny tekst i zmieniasz rozmiar znaków na małe litery w kopii
2. rozdzielasz teksty (oryginał i kopię) na słowa za pomocom explode(); według spacji
3. przeszukujesz kopię (tablicę) słowo po słowie i potem jeśli znajdziesz szukaną frazę w danym słowie to do wartości o takim samym kluczu tylko w oryginale doklejasz formatowanie
4. scalasz spowrotem oryginalną tablicę za pomocom implode();
Ges
Ale kombinujecie smile.gif A początkowe rozwiązanie było najlepsze... smile.gif Byłeś blisko tylko źle użyłeś znajdowania frazy (zabrakło nawiasów) i źle odwoływałeś się do zaindexowanych rezultatów ($1 a nie \\1).

Ostatecznie prawidłowe rozwiązanie zagadki wyglądać powinno tak:

  1. $tresc = preg_replace('/('.$fraza.')/i', '<span style="background-color: red">$1</span>', $tresc);
MakS
Dzięki, właśnie o to mi chodziło.
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.