Hallo, ich scheitere an folgendem Problem und hoffe, ihr könnt mir dabei weiterhelfen.
Zur Sache: Ich erhalte aus einer DB-Abfrage (Suchmaschine) viele Zeichenketten und größere Texte. Bei der Anzeige des Strings möchte ich das Suchwort hervorheben.
Sicher wurde das hier schon oft diskutiert, aber ich habe noch immer keine Lösung gefunden.
Ein einzelnes Wort hervorheben ist ja kein Problem, nur kann es vorkommen, dass es auch mehrere Suchbegriffe sein können. Ob das der Fall ist prüfe ich natürlich ab und falls ja, erzeuge ich ein Array.
Angenommen ich erhalte dann 2 Wörter, die ich in einem Text hervorheben möchte. Und zwar will ich das mit einem <span> machen:
PHP-Code:
<span class="highlight\" title=\"Ihre Suche nach ".$suchanfrage."\">".suchbegriff[0]."</span>
...
<-- und da kommt das Problem:
Es kann dabei vorkommen (zumindest ist das bei mir aufgetreten), dass dass das Zweite Suchwort im ersten auch schon vorhanden ist...
Und jetzt will meine Hervorhebung sich selbst hervorheben und so weiter.
Noch schlimmer wird es, wenn einer der Suchbegriffe "span" ist: dann haut es
mir den ganzen HTML-Code durcheinander.
Mein Quelltext sieht so aus:
PHP-Code:
function Hervorheben($text){
// Suchbegriff teilen, falls mehrere Worte eingegeben wurden
$suche_nach=$_SESSION['cur_suchbegriff'];
$suche_nach=explode(",",$_SESSION['cur_suchbegriff']);
if(is_array($suche_nach)){
for($i=0;$i<count($suche_nach);$i++){
$ret=preg_replace("/(^|[^\w]){1}(".trim($suche_nach[$i]).")($|[^\w]){1}/i","\\1<span class=\"info\" style=\"background-color: ".$cfg["grau_hell"]."; color: ".$cfg["schwarzgrau"].";\" title=\"Ihrere Suche nach ".$_SESSION['cur_suchbegriff']."\">\\2</span>\\3", $text);
}
}
else{
$ret=preg_replace("/(^|[^\w]){1}(".trim($suche_nach[0]).")($|[^\w]){1}/i","\\1<span class=\"info\" style=\"background-color: ".$cfg["grau_hell"]."; color: ".$cfg["schwarzgrau"].";\" title=\"Ihre Suche nach ".$_SESSION['cur_suchbegriff']."\">\\2</span>\\3", $text);
}
return $ret;
}
Wichtig bei der Funktion soll sein, dass sie nicht Groß- und Kleinschreibung beachtet und dass es keine Hervorhebung in der Hervorgebung gibt bzw. dass eine Hervorhebung (Ersetzung) geschützt wird.
Also ich weis da nicht weiter. Ich habe schon so viel ausprobiert mit
preg_replace und
ereg_replace und so...
Aber hier komm ich nicht weiter. Anfänger bin ich auf keinen Fall mehr, nur ich begreife einfach
nicht den blöden Syntax
"/(^|[^\w]){1}[A-Z]|[0-9]" mit den Klammern und Zeichen... Wenn mir das mal jemand erklären könnte...
Wie gesagt, wenn mir hier jemand weiterhelfen kann und einen Lösungsvorschlag hat, dem wäre ich sehr dankbar!
Ich freue mich auf eure Ideen!
Gruß Ringo