Probleme mit str_ireplace für Suche

formmad

Mitglied
Hi.

Vielleicht könnt Ihr mir helfen. Ich führe eine SQL Suchabfrage durch, im Ergebniss sollen die teile fett markiert werden die vorher in der Suche eingeben wurden. Soweit funktioniert auch alles. Hier der Code:
PHP:
$objekt = str_ireplace($keyword , "<b>$keyword</b>", $data['objekt']);

echo $objekt;

Jetzt ist auch alles Super er markiert mir jeden Wortteil Fett. Nur das Problem ist, wenn ein Wort in der Datenbank z.B. "Sahne" zu Anfang groß geschrieben ist, und im Suchformular "sahne" eingegeben wurde, er mir das Wort aus der Datenbank im Ergebnis dann auch klein darstellt. Es soll trotzdem markiert sein aber sich nicht in der Schreibweise ändern.

Wisst ihr Rat?

Gruß
 
Ich hab kein PHP5 zum Testen parat, aber wenn du das Replacement ausserhalb von str_ireplace() als Variable deklarierst, sollte es gehen.
Alternativ könntest du mit eregi_replace() oder preg_replace() arbeiten.

Du könntest auch gleich im Query ersetzen:

SELECT REPLACE(LCASE(spalte), LCASE('$keyword'), '<b>$keyword</b>') as object
 
Hi.

Danke für den Tip. Mir war der Weg nur nicht ganz so klar. Ich habe es jetzt nicht über das Query gelöst, aber dafür mit der preg_replace() Funktion.

PHP:
$objekt = preg_replace('/('.quotemeta($keyword).')/i', '<b style="color: #CC0000;">\\1</b>',$data['objekt']);

echo $objekt;

Gruß
 
Nehme statt quotemeta() besser [phpf]preg_quote[/phpf] .
Das ist dafür gedacht und berücksichtigt wirklich alle Zeichen, die in RegExp's Bedeutung haben.


Ein Keyword a'la |hallo bspw. dürfte dir sonst eine unliebsame Überraschung bereiten.
 
Zurück