(Hallo|Hi(ho)|Tag|Mahlzeit) thomas,
$content .= preg_replace("'(\w*)(".$searchQuery.")(\w*)'i", "<strong>\1<span style="color: #444444;">\2</span>\3</strong>", debugHTMLString($site['content']) );
Erstmal würde ich dir die Benutzung von preg_quote() für $searchQuery ans Herz legen. Das sorgt dafür, dass kein Benutzer (un)absichtlich nicht erwünschten RegEx-Code in dein Suchmuster einschmuggeln kann.
Soweit habe ich das hingekriegt, aber weiter komm ich nicht mehr.
Das Problem ist folgendes: Wenn es im HTML-Code einer Seite zB lautet '... <img src="imgs/this.jpg" alt="Ein Bild von Fritz Meier" /> ...' und es wird nach dem Suchbegriff 'Fritz' gesucht, wird natürlich auch der Begriff im img-Tag entsprechend ersetzt, was natürlich die ganze Ausgabe verstellt.
Wie muss man den Suchstring umschreiben, damit Treffer, die innerhalb von < und > stehen ausser Betracht gezogen werden?
Ich recycle mal einen alten Beitrag. Ein Haken an dem PCRE ist, dass nach dem letzten Tag im HTML-Quelltext kein gewöhnlicher Text mehr kommen darf. Da ein gültiges HTML-Dokument aber mit "</html>" endet, dürfte das kein Problem darstellen.
$pcre = '/' .
preg_quote(html_escape($searchQuery), '/') .
'(?=[^>]*(<([^>]+|!--.*?--)>))/is';
$replace = '<strong class="highlight">$0</strong>';
$contents = preg_replace($pcre, $replace, $haystack);
Hierbei stellt html_escape() (d)eine Funktion dar, die HTML-spezifische Zeichen (zumindest "<" und ">") so umformt, dass der Suchausdruck nicht ins Gehege mit diesen Zeichen im zu durchsuchenden Text kommt. Im einfachsten Fall wäre das htmlspecialchars().
MffG
EisFuX