Suchbegriffe formatieren
Alex S.
- php
Hallo nochmal!
ich bräuchte mal ein paar Gedankenanstöße wie ich folgendes hinbekomme - villeicht habt ihr ja eine Idee:
ich habe eine Suchfunktion erstellt. Die Daten die durchsucht werden liegen in einer mysql db vor.
ich habe vor die ergebnisse wie bei google ausgeben zu lassen, also nach folgendem schema:
------------------------------------------------------------
Titel
... das hier ist der Inhalt der den Begriff _suche_ z.B. fett darstellen würde
und in ca. in der mitte des textes liegt, damit der user einen zusammenhang
feststellen kann.
URL: http://www.meineseite.de/main.php?pid=1,0,0
------------------------------------------------------------
...sorry anstatt auf "vorschau generieren" bin ich auf "absenden" gekommen.
wie schon in dem beispiel drin steht, sollten die begriffe die gesucht werden <fett> formatiert sein und der suchbegriff in der mitte von 2 Zeilen stehen, damit der user einen zusammenhang herausfindet - hättet ihr vielleicht ideen wie man das ungefähr hingbekommt?
ich möchte keinen code, nur gedankenanstöße bin hier gerade voll am verzweifeln ;-(
gruß alex
Hallo Alex!
Du könntest in dem Text, in dem das Suchwort vorkommt mittels strpos() rausfinden an welcher Stelle der Suchstring steht.
Dann kannst Du ja mittels substr() einen Teilstring des Textes zurückgeben. Da kannst Du Dir ja ne beliebige Länge überlegen, und von der Position an dem der Suchstring steht ca. die Hälfte abziehen und von da an dann den Teilstring der festgelegten Länge ausgeben.
In diesem Teilstring kannst Du ja dann mittels str_replace() Deinen Suchstring durch '<strong>'.$suchstring.'</strong>' ersetzen.
Das sollte so an sich funktionieren.
MfG
Götz
Hallo götz!
vielen Dank!
bis hierhin klappt es auch, alledings kommen da noch zwei Probleme dazu:
1. Der User missachtet die klein-großschreibung (weil mysql findet alles innerhalb %suchbegriff% php anscheinend nicht.
2. Der User gibt mehr als nur Suchbegriff ein.
Hast du vielleicht eine ahnung wie man das bewerkstelligen könnte?
gruß alex
Hallo Alex!
- Der User missachtet die klein-großschreibung (weil mysql findet alles innerhalb %suchbegriff% php anscheinend nicht.
Das liegt daran, daß preg_replace() case-sensitive ersetzt.
Wenn Du case-insensitive brauchst, nimm einfach str_ireplace().
- Der User gibt mehr als nur Suchbegriff ein.
Da wird die Sache schon komplizierter.
Du ermittelst erstmal die Positionen, an denen die Suchbegriffe stehen.
Dann nimmst Du um jede dieser Positionen Teilstrings. Wenn diese sich überschneiden, dann ermittle die Überschneidung und "zentriere" den Teilstring irgendwie neu (einfach die Überschneidung nehmen und durch zwei teilen. Dann die eine Hälfe vorn, die andere hinten dazunehmen).
Dann würde ich alle Teilstrings zusammensetzen und vielleicht mit '[...]' oder sowas voneinander trennen und die Suchbegriffe wieder hervorheben.
MfG
Götz
Hi Götz,
ich hatte es mal so versucht:
$content_content = strip_tags($line['content_content']);
$content_content = explode(" ", $content_content);
for ($i=0;$i<count($content_content); $i++) {
for ($x=0;$x<count($suchbegriff); $x++) {
if ($content_content[$i] == $suchbegriff[$x]) {
$content_content[$i] = "<b>" . $content_content[$i] . "</b>";
}
}
}
$content_content = implode (" ", $content_content);
funktioniert aber nur wenn die Rechtschreibung eingehalten wurde und zum Beispiel das Wort nur "Klima" ist und nicht "Klimagerät".
Aber so ist es ja nicht gerade die perfekte Art oder?
Gruß Alex
Hallo Alex!
$content_content = explode(" ", $content_content);
Versteh ich das richtig: Du zerlegst den kompletten Text an den Leerzeichen in einen Array?
funktioniert aber nur wenn die Rechtschreibung eingehalten wurde und zum Beispiel das Wort nur "Klima" ist und nicht "Klimagerät".
Wie gesagt, ich würde es anders machen, siehe mein letztes Posting.
MfG
Götz
Hi Götz,
Versteh ich das richtig: Du zerlegst den kompletten Text an den Leerzeichen in einen Array?
ja richtig, scheint wohl ein ziemlich treudoofer gedanke gewesen zu sein, ich mach es dann mal nach deinem vorschlag ;-)
vielen dank bis hier hin erst mal!!
chao alex