scheldwoordenfilter
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:
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 ?
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
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;
}
{
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 ?
Gesponsorde koppelingen:
Je geeft geen geldige regex op. Misscjien is het makkelijker om str_replace te gebruiken
$resultaat = str_replace($zoeken_naar, $vervangen_met, $zoeken_in);
$resultaat = str_replace($zoeken_naar, $vervangen_met, $zoeken_in);
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.
Waarom niet zo? :
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
}
?>
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;
}
?>
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:
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)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
}
{
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
en als je het zo probeerd:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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;
}
?>
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;
}
?>
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.
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.



