PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Worte aus Badwordliste teilweise unkenntlich machen


Calvados
27.06.2009, 02:50:53
Hallo,

ich möchte eine Badwordliste anlegen und mit einem eingegebenen Text vergleichen.

Badwordliste z.B. Schwein, Sau, Idiot etc.

Werden die Worte in einem Text gefunden, sollen diese Worte
nach der "Behandlung" so aussehen: S*****n, S*u, I***t

Bis auf den ersten und letzten sollen sämtliche Buchstaben eines Wortes
durch Sterne ersetzt werden.

Da meist ein ziemlich langer Test durchsucht werden soll, bis zu 5000 Worte,
ist die Frage, wie man das am schnellesten bewerkstelligen kann.

Hat da jemand einen Tipp ?

Grüsse
Calvados

elkmod
27.06.2009, 08:57:57
Erstmal guten Morgen ;)

Ich würde es mit str_replace lösen:
<?php

$text = 'Schwein, Sau, Idiot'; // bzw. dein Text

$text = str_replace('Schwein','S*****n',$text); // Sucht im nach Schwein und ersetzt es durch S*****n
$text = str_replace('Sau','S*u',$text); // Sucht im nach Sau und ersetzt es durch S*u
$text = str_replace('Idiot','I***t',$text); // Sucht im nach Idiot und ersetzt es durch I***t

echo $text; // Sollte nun S*****n, S*u, I***t ausgeben


?>

Das kannst du dann beliebig erweitern, indem du $text weiter durchsuchst:

$text = str_replace('Böses Wort','Böses Wort zensiert',$text);

Sicherlich nicht die eleganteste Lösung (man kann es bestimmt auch mit Arrays machen), aber es funktionniert.

Calvados
27.06.2009, 21:10:24
Danke für den Hinweis,

Mit Deinem Code als Vorlage habe ich das mal so probiert:

$ROW = mysql_fetch_row(mysql_query("SELECT badlist
FROM ".$dbtable99." "));
$badlist = explode("\r\n", $ROW[0]);
$schleife = count($badlist);
$schleife --;
$code = 0;
$testtext = 'Du bist ein Idiotischer Idiot Blödmann Ein trotteliges
Schwein idiot Trottel';
while($schleife >=0)
{
$kombi = $badlist[$code];
$teilen = explode(',', $kombi);
$bad = $teilen[0]; // Teil1 Badword
$good = $teilen[1]; // Teil2 Ersatzwort
if(function_exists('str_ireplace'))
{
$testtext = str_ireplace($bad, $good, $testtext);
}
else
{
$testtext = str_replace($bad, $good, $testtext);
}
$code ++;
$schleife --;
}
echo $testtext;


Text:
Du bist ein Idiotischer Idiot Blödmann Ein trotteliges Schwein idiot Trottel

Die Badwordliste kommt aus der DB und sieht so aus:
test,t**t\r\nDussel,D****l\r\nIdiot,I****t\r\nSchwein,S******n\r\nBlöd mann,B****mann\r\nArschloch,A****loch\r\nDu,D*\r\nbist,Bi*st

Ergebnis (PHP4):
D* Bi*st ein I****tischer I****t B****mann Ein trotteliges S******n idiot Trottel

Ergebnis (PHP5):
D* Bi*st ein I****tischer I****t B****mann Ein trotteliges S******n i***t Trottel

Funktioniert also ganz gut - ich finde den Code allerdings nicht besonders
elegant und kenne auch nicht die Serverbelastung bei grösseren Texten z.B. 5000 Worte
und einer grösseren Badword-Liste - z.B. 50 Badwords...

Geht das auch besser, schneller, schöner? :-)

Grüsse
Calvados

Chance
28.06.2009, 14:20:29
Und wenn du eine extra Tabelle für die Badwortliste machst ?
Die Ersetzung direkt bei der Abarbeitung der Tabelle machst ?
So spart man sich die Implodes etc.

Was effizienteres fällt mir im momment nicht ein...

Calvados
28.06.2009, 15:33:18
Und wenn du eine extra Tabelle für die Badwortliste machst ?
Die Ersetzung direkt bei der Abarbeitung der Tabelle machst ?
So spart man sich die Implodes etc.

Was effizienteres fällt mir im momment nicht ein...

Moin :-)

Gute Idee - aber wie ?? Bin halt noch Anfänger..

Chance
29.06.2009, 06:44:58
Ganz einfach...

In meinem System würde ich das so machen:



$TempQuery['Query'] = Query('SELECT bad,good FROM '.DB_PREFIX.'_badword WHERE ident!= "" ORDER BY sort_id',__FILE__,__LINE__);
while ($TempQuery['Data'] = mysql_fetch_array($TempQuery['Query'],MYSQL_ASSOC)) {

$testtext = str_replace($TempQuery['Data']['bad'], $TempQuery['Data']['good'], $testtext);

}


Ich hoffe, es hilft weiter ^^ .

Sandra
01.07.2009, 20:41:08
Hallo,

da dieses Thema meinem leider ohne viel Hilfe erreichendem Thema sehr ähnlich ist, wäre es nett zu wissen wie die "badwords" in deiner DB vorliegen, verstehe deinen code nicht.


Danke


Sandra

Calvados
03.07.2009, 01:03:28
Hallo,

Wessen Code meinst Du?

Wenn Du mein Beispiel meinst - ganz einfach:

Im Adminbereich gibt es eine textarea - der Admin gibt die Badwords so ein:

test,t**t
Dussel,D****l
Idiot,I***t

u.s.w.

Nach jeder Wortkombination erfolgt ein klick auf die Return-Taste (daher \r\n).

in der DB wird alles in einem TEXT-Feld gespeichert und sieht so aus:
test,t**t\r\nDussel,D****l\r\nIdiot,I****t\r\nSchwein,S******n\r\nBlöd mann,B****mann\r\nArschloch,A****loch\r\nDu,D*\r\nbist,Bi*st

Den Rest erkennst Du am PHP-Code...

Aber möglicherweise ist Dir das ja auch zu umkompliziert ;-)

Grüsse
Calvados