FP4Lisa
Mitglied
regexp: preg replace nur ganze wörter außerhalb html tags
Hallo,
ich habe folgendes Problem.
Ich habe Kontent für eine Seite in einer SQL Datenbank. Der Kontent besteht hauptsächlich aus Text der dann in ein div eingefügt wird. Jedoch sind ab und an html Tags für Überschriften, Tabellen, Links und Bilder mit drin. Nun möchte ich eine Art Wortfilter einbauen. Dieser Wortfilter soll nicht wie gewöhnlich Schimpfwörter herausfiltern. Bestimmte Wörter sollen in Links umgewandelt werden, mit kleinen Tooltips.
Beispielsweise folgender Ursprungstext:
Nun soll Beispielsweise das Wort "Katze" mit einem Link versehen werden. In der Form:
Das Ganze hat folgenden Sinn. Beim Kontent handelt es sich teils um sehr fachlichen Text mit Fremdworten. Die Fremdwörter sind in einer Datenbank enthalten, sowie die kurze Erklärung, die als Tooltip ausgegeben werden soll und der Link, um das Wort genauer nachzuschlagen. Die Fremdwörter aus der Datenbank lese ich in ein Array. Im array $suchstring steht der zu ersetzende Begriff. Im array $link steht der Link mit Tooltip und allem drum und dran. Die Variable $zensurlexikon enthält den Kontent.
Habe ich zum ersetzen getestet. Problem ist nur, das er dann auch Katze in der Überschrift in einen Link umwandelt. Gut das könnte ich noch verschmerzen, aber ein riesen Problem ist, das er auch Katze im ersetzten Link selbst wieder ersetzen will und das er das Wort Katze um alt des img Tags auch ersetzt, dadurch zerhaut es natürlich den Code. Nun habe ich schon mir Reg Exp herumprobiert. Beispielsweise das hier:
Aber der gewünschte Erfolg blieb leider aus. Nun gebe ich auch ehrlich zu das ich nicht der Regexp Profi bin. Ich habe auch schon nach einem fertigen Script für so eine Umsetzung gesucht, aber ohne Erfolg. Problem ist wahrscheinlich auch das ich nach Wortfiltern suche, mir ist noch kein andere Begriff in den Sinn gekommen.
Es wäre echt lieb wenn mir jemand dabei helfen könnte.
LG Anett
Hallo,
ich habe folgendes Problem.
Ich habe Kontent für eine Seite in einer SQL Datenbank. Der Kontent besteht hauptsächlich aus Text der dann in ein div eingefügt wird. Jedoch sind ab und an html Tags für Überschriften, Tabellen, Links und Bilder mit drin. Nun möchte ich eine Art Wortfilter einbauen. Dieser Wortfilter soll nicht wie gewöhnlich Schimpfwörter herausfiltern. Bestimmte Wörter sollen in Links umgewandelt werden, mit kleinen Tooltips.
Beispielsweise folgender Ursprungstext:
HTML:
<h1>Die Katze</h1>
Die Katze ist ein Tier. <img src="Bildquelle" alt="Katze beim Fressen">
<h1>Der Hund</h1>
Der Hund ist ein anderes Tier. <img src="Bildquelle" alt="Hund rennt">
Nun soll Beispielsweise das Wort "Katze" mit einem Link versehen werden. In der Form:
HTML:
<h1>Die Katze</h1>
Die <a href="link" alt="Tooltip Erklärung zum Wort Katze">Katze</a> ist ein Tier. <img src="Bildquelle" alt="Katze bei Fressen">
<h1>Der Hund</h1>
Der Hund ist ein anderes Tier. <img src="Bildquelle" alt="Hund rennt">
Das Ganze hat folgenden Sinn. Beim Kontent handelt es sich teils um sehr fachlichen Text mit Fremdworten. Die Fremdwörter sind in einer Datenbank enthalten, sowie die kurze Erklärung, die als Tooltip ausgegeben werden soll und der Link, um das Wort genauer nachzuschlagen. Die Fremdwörter aus der Datenbank lese ich in ein Array. Im array $suchstring steht der zu ersetzende Begriff. Im array $link steht der Link mit Tooltip und allem drum und dran. Die Variable $zensurlexikon enthält den Kontent.
PHP:
$zensurlexikon = preg_replace($suchstring,$link,$zensurlexikon);
Habe ich zum ersetzen getestet. Problem ist nur, das er dann auch Katze in der Überschrift in einen Link umwandelt. Gut das könnte ich noch verschmerzen, aber ein riesen Problem ist, das er auch Katze im ersetzten Link selbst wieder ersetzen will und das er das Wort Katze um alt des img Tags auch ersetzt, dadurch zerhaut es natürlich den Code. Nun habe ich schon mir Reg Exp herumprobiert. Beispielsweise das hier:
PHP:
$zensurlexikon = preg_replace("/((<[^>]*)|$suchstring)/ie", '"\2"=="\1"? "\1":"$link"', $zensurlexikon);
Aber der gewünschte Erfolg blieb leider aus. Nun gebe ich auch ehrlich zu das ich nicht der Regexp Profi bin. Ich habe auch schon nach einem fertigen Script für so eine Umsetzung gesucht, aber ohne Erfolg. Problem ist wahrscheinlich auch das ich nach Wortfiltern suche, mir ist noch kein andere Begriff in den Sinn gekommen.
Es wäre echt lieb wenn mir jemand dabei helfen könnte.
LG Anett
Zuletzt bearbeitet: