Wortzensur nicht für Images

Du hast Probleme beim Einbau oder bei der Benutzung eines Mods? In diesem Forum bist du richtig.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.0, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
makue
Mitglied
Beiträge: 282
Registriert: 18.07.2002 07:58
Wohnort: Böblingen
Kontaktdaten:

Beitrag von makue »

Also, der Code wird beim Anzeigen modifiziert, da gibt es kein [img], sondern nur <img>. BBCode wird ja in HTML umgerechnet, sonst kann es ja der Browser nicht anzeigen. Und da alles in < und > nicht ersetzt wird, ist eben der HTML-Code selbst davon nicht betroffen. Also sämtliche Links bleiben unzensiert, die lesbaren Texte, die ja außerhalb der HTML-Tags stehen, werden weiterhin zeinsiert. Wenn man einen Link direkt ins Posting schreibt wird im angezeigten Link das Wort zensiert, klickt man aber drauf, landet man trotzdem auf der richtigen Seite.

Wenn also ebay zensiert ist, würde www.zensurwort.de angezeigt werden, wenn man aber draufklickt, würde man trotzdem zu ebay gelangen. Man sieht beim Mausüberfahren des links diesen korrekten Link dann auch unten im Browser, wo die Links angezeigt werden (Beim IE z.B.).

Ob es durch diese Modifizierung mit Tricks möglich ist, Badwords darzustellen, weiss ich nicht. Aber das ist ja auch durch BBCode im Badword möglich, da versagt der herkömmliche Filter ja auch.
Kiss News
Mitglied
Beiträge: 1640
Registriert: 31.05.2004 02:04
Wohnort: Österreich
Kontaktdaten:

Beitrag von Kiss News »

verstehe, dann ist das aber nix für mich, denn ich will ja Links weiterhin zensieren, nur Fotos eben nicht...

aber vielleicht könnte man dann das Umändern, dass alles zwischen www und jpg bzw. www und gif nicht zensiert wird, wäre das möglich?
makue
Mitglied
Beiträge: 282
Registriert: 18.07.2002 07:58
Wohnort: Böblingen
Kontaktdaten:

Beitrag von makue »

Achso, Du willst nur die Zensur bei Bildern abschalten, nicht bei Links allgemein. Für mich ist das nicht sehr sinnvoll, weil ein badwort in einem link nicht unbedingt auf einen unsauberen Inhalt der Website schließen lässt. Also wenn die Ausnahme nur auf Bilder wirken soll, müsste es so gehen:

Code: Alles auswählen

$message = preg_replace("/((<img[^>]*)|$orig_word)/e", '"\2"=="\1"? "\1":"$replacement_word"', $message);
Das habe ich jetzt aber nicht getestet.
Kiss News
Mitglied
Beiträge: 1640
Registriert: 31.05.2004 02:04
Wohnort: Österreich
Kontaktdaten:

Beitrag von Kiss News »

also ich finde den gesuchten Code bei mir nicht :roll:

bei mir sieht das so aus:
// Replace naughty words
//
if (count($orig_word))
{
$post_subject = preg_replace($orig_word, $replacement_word, $post_subject);
$post_extra = preg_replace($orig_word, $replacement_word, $post_extra);

if ($user_sig != '')
{
$user_sig = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $user_sig . '<'), 1, -1));
}

$message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $message . '<'), 1, -1));
}
//
makue
Mitglied
Beiträge: 282
Registriert: 18.07.2002 07:58
Wohnort: Böblingen
Kontaktdaten:

Beitrag von makue »

Ich habe noch eine recht alte Boardversion, da sieht es halt noch anders aus. Ich habe jetzt keine Lust den regulären Ausdruck auseinanderzunehmen, was der macht. Kannst ja einfach:

Code: Alles auswählen

$message = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $message . '<'), 1, -1)); 
durch meinen Code ersetzen. Aber vielleicht schaltet sich noch jemand ein, der genau weiß was diese Zeile macht. Ich denke, die macht genau das, was meine erste Version auch gemacht hat, badwords in HTML-Code verhindern.
Kiss News
Mitglied
Beiträge: 1640
Registriert: 31.05.2004 02:04
Wohnort: Österreich
Kontaktdaten:

Beitrag von Kiss News »

wenn ich das mache, macht das keinen Unterschied... habe einen Test gemacht, und ich konnte das Foto nicht posten :-?
makue
Mitglied
Beiträge: 282
Registriert: 18.07.2002 07:58
Wohnort: Böblingen
Kontaktdaten:

Beitrag von makue »

Ähm, mir ist da ein Fehler unterlaufen. Die badwords stehen in einen array, ich muss das wohl in eine Schleife ändern. Ich melde mich wenn es klappt.
Kiss News
Mitglied
Beiträge: 1640
Registriert: 31.05.2004 02:04
Wohnort: Österreich
Kontaktdaten:

Beitrag von Kiss News »

OK, danke, wäre ja toll, wenn es wirklich klappen würde :)
makue
Mitglied
Beiträge: 282
Registriert: 18.07.2002 07:58
Wohnort: Böblingen
Kontaktdaten:

Beitrag von makue »

Also, es ist doch oft nicht ganz so einfach, wie es erst scheint. Einmal war das Problem, dass die Badwords in einem array liegen, aber der eigentliche Fehler lag daran, dass die badwordlist vorher schon modifiziert wird. Also es wird für das String-ersetzen schon was modifiziert. Ich hatte aber die eigentlichen badwords erwartet.

Ich habe nun beides ausprobiert, einmal mit den Bildern und einmal ohne. Hier der Code:

Code: Alles auswählen

		$m = 0;
		while(isset($orig_word[$m])) {
			$orig = str_replace("#\b(","",$orig_word[$m]);
			$orig = str_replace(")\b#i","",$orig);
			$orig = "/((<img[^>]*)|".$orig.")/ie";
			$replace = '"\2"=="\1"? "\1":"'.$replacement_word[$m].'"';
			$message = preg_replace($orig,$replace,$message);
			$m++;
		}
Man könnte das natürlich wieder in weniger Zeilen zusammenfassen und damit dann wieder einen schwer lesbaren regulären Ausdruck erzeugen. Aber ich glaube, so ist es besser! :wink:

Falls man nicht nur images zulassen will, sondern alle Links, entfernt man einfach das img aus $orig = "/((<img[^>]*)|".$orig.")/ie";
Ich habe beises ausprobiert und es funktioniert bei mir. Beim ersten mal hatte ich mich getäuscht, das lief auch bei mir nicht korrekt. Ob es mit der letzten Boardversion korrekt läuft weiß ich nicht, es kommt darauf an, wie die badwordlist in der Funktion obtain_word_list() aufbereitet wird.

Ich möchte erwähnen, dass mein Code natürlich nicht die optimale Lösung darstellt. Zeichen zu entfernen, die durch eine Funktion ersz hinzugefügt werden, ist nicht die feine Art. Man könnte eine zweite Funktion schreiben, die die unmodifizierte badwordlist zurückgibt. Aber ich glaube, dass ist es einfach nicht wert. Wenn es so geht, ist es doch ok. So viele Leute werden das nicht brauchen.

Falls es bei Deiner Boardversion nicht läuft, schreibe mir bitte welche Version Du hast, dann schaue ich mir den Code mal an.
Kiss News
Mitglied
Beiträge: 1640
Registriert: 31.05.2004 02:04
Wohnort: Österreich
Kontaktdaten:

Beitrag von Kiss News »

bei mir funtzt das nicht :(
vielleicht liegt es daran, dass ich dieses Snippet eingebaut habe:
http://www.phpbb.de/viewtopic.php?t=64639
damit werden gesperrte Wörter vorher abgefangen und können gar nicht gepostet werden...
habe Version 2.0.10
ich habe allerdings auch einige Mods drinnen...
mein Code sieht so aus:
// Replace naughty words
//
if (count($orig_word))
{
$post_subject = preg_replace($orig_word, $replacement_word, $post_subject);
$post_extra = preg_replace($orig_word, $replacement_word, $post_extra);

if ($user_sig != '')
{
$user_sig = str_replace('\"', '"', substr(preg_replace('#(\>(((?>([^><]+|(?R)))*)\<))#se', "preg_replace(\$orig_word, \$replacement_word, '\\0')", '>' . $user_sig . '<'), 1, -1));
}

$m = 0;
while(isset($orig_word[$m])) {
$orig = str_replace("#\b(","",$orig_word[$m]);
$orig = str_replace(")\b#i","",$orig);
$orig = "/((<img[^>]*)|".$orig.")/ie";
$replace = '"\2"=="\1"? "\1":"'.$replacement_word[$m].'"';
$message = preg_replace($orig,$replace,$message);
$m++;
}
}
//
// If the board has HTML off but the post has HTML
Antworten

Zurück zu „phpBB 2.0: Mod Support“