Gefundenes Wort fett schreiben
Anne
- php
Hi all
Ich habe eine kleine Adressen-Datenbank angelegt. Mittels Suchfunktion werden die entsprechenden Adressen ausgegeben. Nun möchte ich, dass der Suchbegriff (besser alle Suchbegriffe!) innerhalb der Adresse fett geschrieben werden.
Mein Problem ist, dass wenn jemand in die Suche "meinefirma" eingibt, aber in der Datenbank die Firma "Meinefirma" steht, ich das "meinefirma" nicht in "<b>meinefirma</b>" umwandeln kann. Ich bin zu folgendem (unbefriedigenden) Lösungsansatz gekommen:
<?php
preg_match_all('/'.$suchbegriff.'/U',$str_firma,$matches);
foreach($matches as $ersetzer)
$str_firma=str_replace($ersetzer, "<b>".$suchbegriff."", $str_firma);
$suchbegriff=ucfirst($suchbegriff);
preg_match_all('/'.$suchbegriff.'/U',$str_firma,$matches);
foreach($matches as $ersetzer)
$str_firma=str_replace($ersetzer, "<b>".$suchbegriff."", $str_firma);
?>
Das funktioniert eigendlich schon mal ganz gut. Was aber, wenn sich die Firma "MeineFirma" schreibt?
Meine Frage ist: Gibt es eine elegantere Lösung?
Anne
Hallo Anne,
lass doch die Suchergebnisse mit strtolower klein machen und such nur nach kleinen Wörtern, dann ist es egal, wie sie geschrieben wurden.
mfg steffen
Hallo Steffen
Ich verstehe nicht ganz, wie Du das meinst. Du meinst das Resultat aus der DB? Bei der Ausgabe muss die Gross-/Kleinschreibung berücksichtigt sein.
Trotzdem Danke für den Hinweis.
Anne
Hallo Anne,
Es reicht doch, wenn du die Suche selbst nur klein suchst und dann die Ausgabe richtig anzeuigen lässt :)
Im Endefekt ist es nichts anderes, wie die genannte func von Vincent.
Kleines Beispiel:
preg_match(strpos(strtolower($buffer), strtolower($suche[$i]))
mfg
Hallo,
Mittels Suchfunktion werden die entsprechenden Adressen ausgegeben. Nun möchte ich, dass der Suchbegriff (besser alle Suchbegriffe!) innerhalb der Adresse fett geschrieben werden.
Mein Problem ist, dass wenn jemand in die Suche "meinefirma" eingibt, aber in der Datenbank die Firma "Meinefirma" steht, ich das "meinefirma" nicht in "<b>meinefirma</b>" umwandeln kann.
ich persönlich würde eher <em class="suchbegriff">...</em> verwenden, vielleicht auch einfach ein span-Element. Damit hast Du wesentlich bessere Möglichkeiten zur Hervorhebung des Suchbegriffes.
Das funktioniert eigendlich schon mal ganz gut. Was aber, wenn sich die Firma "MeineFirma" schreibt?
Deine Suche ist nicht case-sensitive. Daher sollte str_ireplace() die geeignete Funktion für Dich sein.
Freundliche Grüße
Vinzenz
Danke für Deinen Hinweis Vinzen! Er hat mich zu folgendem Link geführt:
http://forum.jswelt.de/serverseitige-programmierung/40768-str_ireplace-fuer-highlighting-problem-klein-und-grossscheibung.html
Da kämpfte jemand mit dem gleichen Problem. Ich denke, dass mir dieser Artikel weiter helfen wird.
Hallo Anne,
verwende doch einfach preg_replace() mit Backreference:
$str_firma = preg_replace('/('.$suchbegriff.')/i', '<b>\1</b>', $str_firma);
Das i nach dem Delimiter sorgt dafür, dass Groß- und Kleinschreibung ignoriert wird.
Grüße
Nico
Hallo Anne,
bei der Suche im Web stiess ich auf diese Seite.
Ob man etwas fett oder hinterlegt ausgibt ist IMHO egal.
Also solltest Du damit Dein Problem vollständig lösen können!
mbG Rolf