applicare filtro anti spam

  • Creatore Discussione Creatore Discussione asevenx
  • Data di inizio Data di inizio

asevenx

Utente Attivo
7 Nov 2009
312
0
16
salve, vorrei applicare un filtro antispam per un guestbook di un sito. Quindi vorrei con un ciclo if impedire l'inserimento di messaggi che contengono determinate parole o creare una "lista nera" delle parole che non si possono usare nel guestbook. Qualcuno può darmi una dritta?

PS: vorrei evitare l'utilizzo di login, di password d'accesso o controlli captcha, ma inserire semplicemente dei controlli sul messaggio inserito. grazie mille
 
Ultima modifica:
Ti ho fatto un esempio

PHP:
$lista_nera = array('vietata 1' => 'parola1', 'vietata 2' => 'parola2', 'vietata 3' => 'parola3');

foreach($lista_nera as $parola)
if(str_replace($lista_nera[$parola],'not valid',$_POST['messaggio'])) echo $lista_nera[$parola] . "è vietata<br>";
 
ciao, ti ringrazio per la risposta, non capisco bene la composizione della lista nera. Cosa sono "vietataX" e "parolaX"? Comunque a forza di provare sono riuscito a trovare (5 min fa) una soluzione, non sarà molto elegante ma per il momento sembra che vadi, secondo te può essere efficacie?
PHP:
$spam = array("parola1", "parola2", "parola3", "parola4", "parola5", "parola6", "parola7", "parola8");
$antispam = "XXX";
$filtro = str_replace($spam, $antispam, $commento);

$verifica = substr_count($filtro, $antispam);

if ($verifica > 0) {
	echo "filtro antispam attivo";
}else{
 
Devi usare un foreach come ti ho fatto vedere, $spam è un array quindi vanno richiamate le variabili della sua lista
non basta mettere solo la variabile
 
Ultima modifica:
ciao
@ Nefyt
sei sicuro?
http://it2.php.net/manual/en/function.str-replace.php
str_replace, se non sbaglio, può contenere anche degli array, il tuo sistema va bene se voglio far vedere quale è la parola sostituita

@ asevenx
se guardi il link vedi che dalla ver 5 è stato aggiunto un parametro che conta il numero dei "rimpiazzi"
PHP:
<?php
//....
$spam = array("parola1", "parola2", "parola3", "parola4", "parola5", "parola6", "parola7", "parola8"); 
$antispam = "XXX"; 
$filtro = str_replace($spam, $antispam, $commento, $verifica); 
//$verifica = substr_count($filtro, $antispam); 
if ($verifica > 0) { 
    echo "filtro antispam attivo"; 
}else{
//..... 
?>
poi usa str_ireplace (case insensitive) così sostituisci sia (es) parola1 che pAroLa1
 
ciao
@ Nefyt
sei sicuro?
http://it2.php.net/manual/en/function.str-replace.php
str_replace, se non sbaglio, può contenere anche degli array, il tuo sistema va bene se voglio far vedere quale è la parola sostituita

@ asevenx
se guardi il link vedi che dalla ver 5 è stato aggiunto un parametro che conta il numero dei "rimpiazzi"
PHP:
<?php
//....
$spam = array("parola1", "parola2", "parola3", "parola4", "parola5", "parola6", "parola7", "parola8"); 
$antispam = "XXX"; 
$filtro = str_replace($spam, $antispam, $commento, $verifica); 
//$verifica = substr_count($filtro, $antispam); 
if ($verifica > 0) { 
    echo "filtro antispam attivo"; 
}else{
//..... 
?>
poi usa str_ireplace (case insensitive) così sostituisci sia (es) parola1 che pAroLa1
$spam senza la corrispondete variabile $spam['var'] da come risultato "array" anche a stamparlo
 
ciao
prova
PHP:
<?php
$commento="questo testo contiene parola2 e parola5";
$spam = array("parola1", "parola2", "parola3", "parola4", "parola5", "parola6", "parola7", "parola8"); 
$antispam = "XXX"; 
$filtro = str_replace($spam, $antispam, $commento, $verifica); 
//$verifica = substr_count($filtro, $antispam); 
if ($verifica > 0) { 
    echo "filtro antispam attivo ";
	echo "testo filtrato: $filtro <br>";
}else{
	echo "no proibite: $filtro <br>";
}
?>
output
filtro antispam attivo testo filtrato: questo testo contiene XXX e XXX
 

Discussioni simili