Versio

scheldwoordenfilter

Overzicht Reageren

Marcel K

Marcel K

23/01/2007 16:57:00
Quote Anchor link
Ik ben bezig met een scheldwoordenfilter waarbij de foute woorden vervangen moeten worden door goede woorden.
Bijvoorbeeld: teringlijer => onaardig persoon
De foute en goede woorden zijn opgeslagen in een tabel met als structuur:

CREATE TABLE `smart_badwords` (
`id` int(11) NOT NULL auto_increment,
`bad` varchar(32) NOT NULL,
`good` varchar(32) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin2 AUTO_INCREMENT=3 ;

de source-code van de fuctie is:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function badwords($params)
 {
  global $db;

  if (!empty($params['tekst'])) {
    $tekst = $params['tekst'];

    $sql = "SELECT bad, good FROM `smart_badwords`";
    $result=$db->sql_query($sql);
    if ($db->sql_numrows($result) >0){
         while ($row =$db->sql_fetchrow($result)) {
             $badwords[]=$row;
         }
    }

    foreach($badwords as $fout => $goed )   {
            $invoer = preg_replace('#'.preg_quote($fout,'#').'#i',$goed,$tekst);
        }
    }
    return $invoer;

 }


Ik krijg constant foutmeldingen als: Warning: preg_replace() [function.preg-replace]: Parameter mismatch, pattern is a string while replacement in an array. in D:\AppServ\www\2m-smart\function.badwords.php on line 28

Echter, door een niet aflatende hoofdpijn veroorzaakt door medicijnen zie ik momenteel geen oplossing. Het is tevens voor mij ook de eerste keer dat ik met preg_replace enzo werk, dus dat begrijp ik ook nog niet zo goed.

Wie kan mij helpen met dit probleempje ?
 
PHP hulp

PHP hulp

25/05/2012 15:12:06
Gesponsorde koppelingen:
 
Martijn Wieringa

Martijn Wieringa

23/01/2007 16:59:00
Quote Anchor link
Je geeft geen geldige regex op. Misscjien is het makkelijker om str_replace te gebruiken

$resultaat = str_replace($zoeken_naar, $vervangen_met, $zoeken_in);
 
Marcel K

Marcel K

23/01/2007 17:13:00
Quote Anchor link
Het probleem zit zo te zien dat ik het array niet goed op orde heb, maar ik zie nu even niet hoe ik dat kan veranderen.
 
Niek s

niek s

23/01/2007 17:21:00
Quote Anchor link
Waarom niet zo? :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function badwords($params)
 {

  global $db;

  if (!empty($params['tekst'])) {
    $tekst = $params['tekst'];

    $sql = "SELECT bad, good FROM `smart_badwords`";
    $result=$db->sql_query($sql);
    if ($db->sql_numrows($result) >0){
         while ($row =$db->sql_fetchrow($result)) {
             $invoer = str_replace($row['bad'],$row['good'],$invoer);
         }
    }

    return $invoer;

 }

?>
 
Marcel K

Marcel K

23/01/2007 17:44:00
Quote Anchor link
Het idee is leuk maar werkt niet, maar 1 woord wordt vervangen.
In de tabel staat om te proberen:
rij 1 : fout - goed
rij 2: fout2 - goed2
ik roep aan als volgt:
$tekst = "wat een fout en fout2";
$bla = badwords($tekst);
echo $bla;

Dit zou dus moeten geven: wat een goed en goed2
Resultaat is echter: wat een fout en goed2

Er wordt dus alleen het laatste woord vervangen ??

btw, code was ook niet helemaal goed, zou met jouw voorbeeld moeten zijn:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function badwords($tekst)
 {
  global $db;

    $sql = "SELECT bad, good FROM `smart_badwords`";
    $result=$db->sql_query($sql);
    if ($db->sql_numrows($result) >0){
         while ($row =$db->sql_fetchrow($result)) {
             $invoer = str_replace($row['bad'],$row['good'],$tekst);
         }

    }
    return $invoer;
}
Gewijzigd op 01/01/1970 01:00:00 door Marcel K
 
Robin Albers

Robin Albers

23/01/2007 17:47:00
Quote Anchor link
en als je het zo probeerd:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
function badwords($params)
 {

  global $db;

  if (!empty($params['tekst'])) {
    $tekst = $params['tekst'];

    $sql = "SELECT bad, good FROM `smart_badwords`";
    $result=$db->sql_query($sql);
    if ($db->sql_numrows($result) >0){
         while ($row =$db->sql_fetchrow($result)) {
             $invoer. = str_replace($row['bad'],$row['good'],$invoer);
         }
    }

    return $invoer;

 }

?>
 
Marcel K

Marcel K

23/01/2007 19:32:00
Quote Anchor link
Dat gaat ook niet goed Robin, iedere keer dat de lus wordt doorlopen wordt $invoer bij $invoer gevoegd.
Resultaat bij 2 rijen in de database:
wat een goed en goed2wat een fout en goed2

Het werkt dus gedeeltelijk zo te zien, maar mag maar 1 keer uitgevoerd worden.
 



Overzicht Reageren