Wyszukiwarka php, kolorowanie znalezionych słów

0

Witam,
Mam system newsów i wyszukiwarkę do nich.
Po wyszukiwaniu (za pomocą zapytania: Like "%$szukany_ciąg%") koloruje znalezioną frazę:

  
$tekst_html_newsa=str_replace($szukany_ciag, '<b style="background-color:yellow;">'.$szukany_ciag.'</b>', $tekst_html_newsa); 

Problem w tym że jeśli szukana fraza trafi się w środku znacznika to w środek znacznika jest wstawiane kolorowanie i wszystko się sypie na ekranie.

O ile można przefiltrować szukany ciąg aby nie szukać znaczników, albo takich słów jak title, href, onclick itp. to jest problem jeśli jest jakiś link: <a href="http://strona.pl/jakis-tekst.html"> cos </a>
Bo wtedy po wyszukanie frazy "jakis" albo "tekst" i tak sie posypie.

Jak to zrobić?

0

Najszybciej to chyba wyszukiwać w MySQL tak jak masz, potem jakiś parser DOM (nie parser XML, bo HTML nie będzie poprawnym XML, sparsuje się, ale się zepsuje, tj. zgubi się na ciągu: <div> test <span>test</span> test</div>), w nim przekopujesz się przez wszystkie wartości tekstowe i podświetlasz. Jak nie znajdzie żadnej, to znaczy, że to właśnie w atrybutach było, więc olewasz taki wpis. Kłopotliwe jest stronicowanie elementów filtrowanych po części w PHP.

Tyle mi przychodzi do głowy, a jakieś profesjonalne rozwiązanie? To nie znam

0

Szukaj raczej pod "parser HTML". Potrzebny ci odpowiednik .NETowego HTML Agility Pack. Lepiej znaleźć coś własnego niż próbować pisać, bo potem takie kwiatki wychodzą:

#include <iostream>
0

Poradziłem sobie tak że w zapytaniu dodaję spację przed szukaną frazę:
" LIKE '% ".$szukany_ciag."%' "

Dzięki temu linki będą pomijane, bo w nich spacji nie ma. A jednocześnie raczej nie wpłynie to na użyteczność szukajki.
pozdrawiam

1 użytkowników online, w tym zalogowanych: 0, gości: 1