vor und nach bestimmten wort etwas einfügen - wie?

heino-th

Erfahrenes Mitglied
Nabend,

ich hoffe ihr könnt mir helfen,
ich probier schon den ganzen Tag das hinzubekommen, bekomms aber einfach net hin :(

Also mein Problem:
Ich möchte in einer Mailnachricht ($Nachricht_zensiert) bei bestimmten Wörtern ($boeseWoerter),
vor und nach dem Wort einige Zeichen, Wörter oder so einbinden
(z.b: <s>hier das böse Wort</s>).
Nun mein Problem: Ich hab kein Peil wie ich das anstellen könnte?! :confused:
Mein Ansatz ist zur Zeit so, aber der kann ja net funktionieren, weil der ja nur die Wörter ersetzt und nicht davor und danach was dazufügt! :(

PHP:
//Zensiert-Filter
function badwords($Nachricht_zensiert){

//böse Wörter durch ',' getrennt
$boeseWoerter = "hurrensohn,hurre,fick dich,fick,fuck you,fuck,
                 bumsen,penner,sau,krüppel,arschgeburt";

$Filter = "<s>$boeseWoerter</s>";


//Text nach bösen Wörtern durchsuchen und durch den Zensiert-Filter ersetzen
$badwords = explode(",",$badwords[i]); 
for($i=0;$i<count($badwords);$i++){
   $Nachricht_zensiert = str_ireplace("$badwords[$i]","$Filter",$Nachricht_zensiert);     
}

//Gefilterte Nachricht ausgeben
return $Nachricht_zensiert;

}
echo badwords("<b>Zensiert:</b> $Nachricht_zensiert");

[edit:in badwords sind natürlich noch mehr Wörter (sorry für die bösen Wörter hir, n paar siond von hier schon gefiltert worden :-) !)]

Bitte helf mir, nur n Ansatzt oder so?! :D

thx

mfg heino
 
Gehts so?
PHP:
<?
function badwords($Nachricht_zensiert){

//böse Wörter durch ',' getrennt
$boeseWoerter = "hurrensohn,hurre,fick dich,fick,fuck you,fuck,
                 bumsen,penner,sau,krüppel,arschgeburt";




//Text nach bösen Wörtern durchsuchen und durch den Zensiert-Filter ersetzen
$badwords = explode(",",$boeseWoerter);
for($i=0;$i<count($badwords);$i++){
$Filter = "<s>$badwords[$i]</s>";
   $Nachricht_zensiert = preg_replace("#$badwords[$i]#Uis","$Filter",$Nachricht_zensiert);
}

//Gefilterte Nachricht ausgeben
return $Nachricht_zensiert;

}

echo badwords("<b>Zensiert:</b> $Nachricht_zensiert");
?>

Jedoch würde ich statt des bösen Wortes ZENSIERT oder soetwas schreiben und nicht das böse Wort duchstreichen.

mb fanste

PS: Mein PHP gibt mir eine Fehlermeldung aus und sagt, dass es die Funktion str_ireplace nicht gibt. Wiso das?

EDIT: Hab es gerade herausgefunden. Ist erst ab Version 5 verfügbar.
 
Zuletzt bearbeitet:
Hallo!

PHP:
$badwords = explode(",",$badwords[i]);

Was ist denn hier in dem Array badwords enthalten? Und auf welches Element zeigt i?
Müsste es nicht heissen

PHP:
$badwords = explode( ',', $boeseWoerter );

Das ganze Script hab' ich mal so umgebaut:

PHP:
<?php
//Zensiert-Filter 
function badwords($Nachricht_zensiert)
{ 
	//böse Wörter durch ',' getrennt 
	$boeseWoerter = 'dem,den';

	$Filter = "<s>$0</s>";


	//Text nach bösen Wörtern durchsuchen und durch den Zensiert-Filter ersetzen 
	$badwords = explode( ',', $boeseWoerter );
	
	//Die Array-Elemente in Suchmuster umwandeln

	for ( $i = 0; $i < sizeof ($badwords); $i++ )
		$badwords[$i] = '=' . $badwords[$i] . '=i';

	$Nachricht_zensiert = preg_replace ( $badwords, $Filter, $Nachricht_zensiert );

	//Gefilterte Nachricht ausgeben 
	return $Nachricht_zensiert; 
}

$Nachricht = 'Man wünscht dem, den man liebt, das Wohl und man wünscht dem, den man haßt, den Tod.';

echo badwords( '<b>Zensiert:</b> ' . $Nachricht );
?>

Zum Ersetzen der "Badwords" dient hier die Funktion preg_replace, an die das Array badwords direkt übergeben wird.
Damit aber die richtigen Suchmuster übergeben werden, hab' ich eine Schleife eingefügt, die die Delimeter an die einzelnen Array-Elemente von badwords anhängt.
Ich denke, das geht schneller, als die Funktion preg_replace in einer Schleife zig mal ausführen zu lassen.

Die Ausgabe:

Zensiert: Man wünscht <s>dem</s>, <s>den</s> man liebt, das Wohl und man wünscht <s>dem</s>, <s>den</s> man haßt, <s>den</s> Tod.
 
Hallo,

vielen Dank, funktioniert beides super, habs nur noch abändern müssen! ;) danke

Nur noch ein paar Fragen:
@fanste: Wie kann ich bei deinem jetzt so machen, das das zensierte Wort, das durchgestrichen worden ist, auch in vorheriger Schreibweise (groß,klein) erscheinen lassen?

PHP:
preg_replace("#$badwords[$i]#Uis","$Filter",$Nachricht_zensiert);
Was bedeutet da des '#' vor $badwords und das '#Uis'? Sonst versteh ichs ja, hab aber leider grad nich viel Zeit und werds deswegen nacher nochmal studieren :-)

-------
Zensieren wäre ja kein Problem gewesen, hab ich schon gahabt.
Nur haben sich ein paar Leute beschwert, sie möchten gerne den korrekten Inhalt sehen, nur kann und möchte ich das nicht, sondern lasse sie einfach rot durchstreichen :D
------

thx
mfg heino
 
Zurück