Funky_MF
Erfahrenes Mitglied
Um eine Suchfunktion innerhalb einer Website übersichtlicher zu gestalten, möchte ich alle gefundenen Suchbegriffe im Suchergebnis highlighten, so wie es z.B. auch hier im Board gemacht wird.
Die Daten in denen gesucht wird, liegen als HTML-Code in einer MySqL-DB, die Abfrage mit der Suchfunktiion klappt auch wunderbar und bis jetzt benutze ich folgende Zeilen für die Highlightfunktion. Der Suchbegriff wird als Variable $search übergeben und das Suchergebnis, also der komplette HTML-Block des zugehörigen Datensatzes als Array-Element $content [1]:
Funktioniert soweit ganz gut, wenn aber jetzt als Suchbegriff z.B. 'span' oder irgendein anderer HTML-spezifischer Begriff übergeben wird, dann zerhauts logischerweise den HTML-Code an der entsprechenden Stelle.
Ich müsste also zunächst alle HTML-Tags rausfiltern, die Highlightfunktion anwenden, und danach die HTML-Tags wieder einfügen, an der richtigen Stelle natürlich.
Mein erster Gedanke war, mit explode zu arbeiten und als Trennzeichen '<' bzw. '>' zu verwenden, aber dann hab ich zwar alles in einem Array, aber kann nicht mehr zw. HTML u. Text unterscheiden.
Wie kann ich das lösen ?
Die Daten in denen gesucht wird, liegen als HTML-Code in einer MySqL-DB, die Abfrage mit der Suchfunktiion klappt auch wunderbar und bis jetzt benutze ich folgende Zeilen für die Highlightfunktion. Der Suchbegriff wird als Variable $search übergeben und das Suchergebnis, also der komplette HTML-Block des zugehörigen Datensatzes als Array-Element $content [1]:
PHP:
$content[1] = str_replace(strtolower($search), "<span style=\"color:#FFF; background-color:#00A973; border:1px solid #FFF; padding:1px;\">".strtolower($search)."</span>", $content[1]);
$content[1] = str_replace(strtoupper($search), "<span style=\"color:#FFF; background-color:#00A973; border:1px solid #FFF; padding:1px;\">".strtoupper($search)."</span>", $content[1]);
$content[1] = str_replace(ucfirst($search), "<span style=\"color:#FFF; background-color:#00A973; border:1px solid #FFF; padding:1px;\">".ucfirst($search)."</span>", $content[1]);
echo $content[1];
Funktioniert soweit ganz gut, wenn aber jetzt als Suchbegriff z.B. 'span' oder irgendein anderer HTML-spezifischer Begriff übergeben wird, dann zerhauts logischerweise den HTML-Code an der entsprechenden Stelle.
Ich müsste also zunächst alle HTML-Tags rausfiltern, die Highlightfunktion anwenden, und danach die HTML-Tags wieder einfügen, an der richtigen Stelle natürlich.
Mein erster Gedanke war, mit explode zu arbeiten und als Trennzeichen '<' bzw. '>' zu verwenden, aber dann hab ich zwar alles in einem Array, aber kann nicht mehr zw. HTML u. Text unterscheiden.
Wie kann ich das lösen ?
Zuletzt bearbeitet: