Ein etwas anderer Wortfilter in HTML

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:
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:
Fällt mir gerade etwas schwer nachzuvollziehen.

Folgendes

PHP:
$zensurlexikon = '	<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">';

$suchstring=array();
$suchstring[0] = "/[^\"]Katze[^<]/";
$suchstring[1] = "/[^\"]Hund[^<]/";

$link=array();
$link[0] = ' <a href="Katze.html">Katze</a> ';
$link[1] = ' <a href="Hund.html">Hund</a> ';

$zensurlexikon = preg_replace($suchstring,$link,$zensurlexikon); 

echo $zensurlexikon;

führt zu:
HTML:
<h1>Die Katze</h1>
Die <a href="Katze.html">Katze</a> ist ein Tier. <img src="Bildquelle" alt="Katze beim Fressen">
<h1>Der Hund</h1>
Der <a href="Hund.html">Hund</a> ist ein anderes Tier. <img src="Bildquelle" alt="Hund rennt">
 
Ich habe echt schon mein Bestes gegeben es zu erklären. Ich nehme mal an dir kommt das spanisch vor, weil mein Problem so simpel ist, das du dir nicht vorstellen kannst das es mein Problem ist. Schnief. Aber durch dein RegExp sieht es schon besser aus als nach meinen Versuchen. Problem ist das er einfach alles ersetzt. Bsp.:

PHP:
<?php
$zensurlexikon = '    <h1>Die Katze als solches</h1>
                        Die Katze ist ein Tier. Es gibt sehr viele Katzenrassen. Es ist nicht leich sich für eine Rassekatze zu entscheiden. Alle Katzen sind auf ihre Weise schön. <img src="Bildquelle" alt="Eine andere Katze beim Fressen">
                    <h1>Der Hund und so</h1>
                        Der Hund ist ein anderes Tier. <img src="Bildquelle" alt="Ein anderer Hund rennt">';

$suchstring=array();
$suchstring[0] = "/[^\"]Katze[^<]/";
$suchstring[1] = "/[^\"]Hund[^<]/";

$link=array();
$link[0] = ' <a href="Katze.html" title="Hier wird der Begriff Katze erklärt">Katze</a> ';
$link[1] = ' <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> ';

$zensurlexikon = preg_replace($suchstring,$link,$zensurlexikon); 

echo $zensurlexikon;  

?>

HTML:
<h1>Die <a href="Katze.html" title="Hier wird der Begriff Katze erklärt">Katze</a> als solches</h1>
Die <a href="Katze.html" title="Hier wird der Begriff Katze erklärt">Katze</a> ist ein Tier. Es gibt sehr viele <a href="Katze.html" title="Hier wird der Begriff Katze erklärt">Katze</a> rassen. Es ist nicht leich sich für eine Rassekatze zu entscheiden. Alle <a href="Katze.html" title="Hier wird der Begriff Katze erklärt">Katze</a>  sind auf ihre Weise schön. <img src="Bildquelle" alt="Eine andere <a href="Katze.html" title="Hier wird der Begriff Katze erklärt">Katze</a> beim Fressen">
<h1>Der <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> und so</h1>
Der <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> ist ein anderes Tier. <img src="Bildquelle" alt="Ein anderer <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> rennt">

Er macht zB. aus Katzenrassen -> Katze rassen ...
 
Und dann ist da nochwas ....

Steht im Tooltip des Links ein Begriff der auch zu dersetzen ist, dann ersetzt er auch noch den Tooltip.

PHP:
<?php
$zensurlexikon = '    <h1>Die Katze als solches</h1>
                        Die Katze ist ein Tier. Es gibt sehr viele Katzenrassen. Es ist nicht leich sich für eine Rassekatze zu entscheiden. Alle Katzen sind auf ihre Weise schön. <img src="Bildquelle" alt="Eine andere Katze beim Fressen">
                    <h1>Der Hund und so</h1>
                        Der Hund ist ein anderes Tier. <img src="Bildquelle" alt="Ein anderer Hund rennt">';

$suchstring=array();
$suchstring[0] = "/[^\"]Katze[^<]/";
$suchstring[1] = "/[^\"]Hund[^<]/";

$link=array();
$link[0] = ' <a href="Katze.html" title="Die Katze ist ein ganz anderes Tier als der Hund und das Kaninchen">Katze</a> ';
$link[1] = ' <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> ';

$zensurlexikon = preg_replace($suchstring,$link,$zensurlexikon); 

echo $zensurlexikon;  

?>

HTML:
<h1>Die <a href="Katze.html" title="Die Katze ist ein ganz anderes Tier als der <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> und das Kaninchen">Katze</a> als solches</h1>
Die <a href="Katze.html" title="Die Katze ist ein ganz anderes Tier als der <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> und das Kaninchen">Katze</a> ist ein Tier. 
Es gibt sehr viele <a href="Katze.html" title="Die Katze ist ein ganz anderes Tier als der <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> und das Kaninchen">Katze</a> rassen. 
Es ist nicht leich sich für eine Rassekatze zu entscheiden. 
Alle <a href="Katze.html" title="Die Katze ist ein ganz anderes Tier als der <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> und das Kaninchen">Katze</a>  sind auf ihre Weise schön.
<img src="Bildquelle" alt="Eine andere <a href="Katze.html" title="Die Katze ist ein ganz anderes Tier als der <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> und das Kaninchen">Katze</a> beim Fressen">

<h1>Der <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> und so</h1>

Der <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> ist ein anderes Tier.
 <img src="Bildquelle" alt="Ein anderer <a href="Hund.html" title="Hier wird der Begriff Hund erklärt">Hund</a> rennt">

Hier mal die Testdatei zum anschauen im Browser

http://www.kittenplaner.de/test.php

Ich denke die Beispiele treffen mein Problem nun recht genau.
 
Zurück