scheldwoordenfilter
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 ?
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.
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;
}
?>
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
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;
}
?>
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.