Blacklist von Wörtern in Guestbook

Gunah

Erfahrenes Mitglied
moin

ich bin gerade dabei eine Blacklist für ein GB zu machen, jeder Eintrag soll eine Eintrag in der DB haben und dann im Text ersetzt werden per Array...

mit str_ireplace funktioniert das sehr gut nur leider wird das Script auf einem PHP4 Server laufen müssen, und str_ireplace wird erst ab PHP5 unterstützt...

die examples wie man die Funktion zum laufen bekommt unter PHP4 funktionieren leider alle nicht...

das Problem ist denke ich das es aus einem Array gelesen werden muss...
deshalb geht eregi_replace auch nicht

MfG Gunah
 
Hi,

PHP:
foreach($blacklist as $value) {
   str_replace($value, "", $text);
}

oder, wenn Du key-value-Paare hast, wobei der value der replace-String ist:

PHP:
foreach($blacklist as $key => $value) {
   str_replace($key, $value, $text);
}

oder verstehe ich Dich falsch?

LG
 
ich habe mir eine Function gebastelt

PHP:
function gb_blacklist($str) {
global $db;
$replace=array();
$search=array();
    $return=$db->query("SELECT * FROM gb_blacklist");
        while($row=$db->fetch_array($return)) {
        array_push($replace,$row['replace']);
        array_push($search,$row['value']);
    }
    reset($search);
    reset($replace);
    return str_ireplace2($search,$replace,$str);
}

diese soll bestimmte wörter Canceln die nicht erwünscht sind

MfG Gunah
 
Hi,

auch kein Problem. Definier die mal so:

PHP:
function str_ireplace2($search, $replace, $str) {
   foreach($search as $key => $value) {
      $str = str_replace($value, $replace[$key], $str);
   }
   return $str;
}

LG
 
Via reguläre Ausdrücke sähe es auch nicht schlimmer aus:
PHP:
<?php

// Badword Liste anlegen
$badwords = array(
        "badword 1",
        "badword 2",
        // ...
        "badword n"
    );

// Ersetzen durch einheitlichen String...
$replace = "*zensiert*";

/*
// oder als Array Array:
$replace = array(
        "replace 1",
        "replace 2",
        // ...
        "replace n"
    );

// Fülle Rest auf, wenn nötig
for ( $i = sizeof( $replace ); $i < sizeof( $badwords ); ++$i ) {
    array_push( $replace, "*zensiert*" );
}

*/

// Für Regex-Replace vorbereiten
foreach ( $badwords as &$value ) {
    // Delimiter . quoted String . Delimiter & case insensitive
    $value = '%' . preg_quote( $value, '%' ) . "%i";
}

// Via regulären Ausdruck ersetzen
$string = preg_replace(
        $badwords,
        $replace,
        $string
    );

/*
// oder ersetze durch bestimmtes Zeichen mit der Anzahl an Zeichen des ursprünglichen Wortes:
$string = preg_replace_callback(
        $badwords,
        create_function(
                "\$args",
                "return str_repeat( '*', strlen( \$args[0] ) );" // '*' -> durch Sternchen ersetzen
            ),
        $string
    );
*/
 

Neue Beiträge

Zurück