- Home
- Categorie
- Coding e Sistemistica
- PHP
- filtro parole in php
-
Funziona!:D:D:D:D
Non ho ben capito come, con strpos non ne voleva sapere, ma con strrpos (con 2 erre) funziona perfettamente.
Il codice finale è questo:
[HTML]
/* creo un array che contiene tutte le parole che voglio vietare di inserire nel form*/
$parolacce=array('parolaccia','seconda parolaccia','.azz','cac..');
/cicla ogni parola presente nell'array e assegna ogni valore alla variabile/
foreach($parolacce as $parolaccia)
{
$pos=strrpos($testo_form,$parolaccia);
}
if ($pos === false ){
//Nessuna parolaccia, fai quello che devi
}else{
//regolati di conseguenza!
}
[/HTML]ora ci metto anche l'array in un file di testo, cosi creo un area amministrativa in cui poter aggiungere nuove parolacce.
Grazie mille
Ciao
-
Altra piccola cosa, non trovo più la funzione cerca all'interno del forum, sapete che fine ha fatto?
-
Per la funzione cerca, ti devi prima loggare, quindi la trovi nella barra blu in alto.
La differenza fra strpos e strrpos è che la prima trova la posizione della prima occorrenza mentre la seconda trova la posizione dell'ultima occorrenza.
-
Sembrava troppo bello!
Ora ho questo codice:
[HTML]
//recupero parolacce da file
$var=fopen("article/cache/filtro.php","r");
$parole=fread($var,filesize("article/cache/filtro.php"));
echo $parole;
/* creo un array che contiene tutte le parole che voglio vietare di inserire nel form*/
$parolacce=array(strip_tags($parole));
/cicla ogni parola presente nell'array e assegna ogni valore alla variabile/
foreach($parolacce as $parolaccia)
{
$pos=strrpos($testo_form,$parolaccia);
}
if ($pos === false ){
//Nessuna parolaccia,fai quello che devi
}else{
//regolati di conseguenza!
}
[/HTML]perchè se ci metto l'apertura del file non funziona piu nulla?
- se la cancello e scrivo l'array -> funziona
- se la lascio e scrivo l'array -> non funziona
- se la lascio e passo $parole -> non funziona
non l'ho proprio capita, però mi rompe, è proprio brutto un filtro parole a cui non posso aggiungere/togliere parole
-
Ciao per creare un array che contiene le parole proibite puoi usare questa funzione che crea un array con tutte le parole presenti nel file filtro.txt . [PHP]$parole proibite = file('filtro.txt');[/PHP]
Il file txt lo devi creare usando una riga per ogni parola.
-
Insiste nello stargli sulle balle l'array ricavato da file esterno.
Se me lo scrivo a mano nel codice tutto funziona
Se lo richiamo da un file, anche con la funzione file() non funzia piu nulla...Qualche idea ??
-
Le parole nel file txt come le scrivi? Le devi mettere una per riga.
Inoltre, con un ciclo foreach o con un var_dump fatti stampare a monitor sia il contenuto dell'array ricavato da file che quello costruito a manina da te nel codice e che ti funziona e confronta le differenze...
-
Mi sono accorto di una cosa strana.
Per motivi legati ai tempi di consegan avevo sospeso per un attimo la fase in metto un file di testo da cui pescare le parolacce. Ed avevo mantenuto il codice iniziale con l'array scritto a manina.
Ho fatto tutti i miei test con 4/5 parolacce e tutto funzionava.
Oggi ho implemantato l'array con la lista delle parolacce, aggiungendo valori all'array, e mi sono accorto che con 4/5 parole funziona tutto, con un maggiore numero di parole non funziona più nulla...Qualcuno a qualche idea sullo starno comportamento di questo script??
Pensavo di essere stato io ad aver compilato male l'array, ma sono ore che lo guardo e non trovo nulla di strano nei valori passati.
Non la riesco prorpio a capire....
il codice è di nuovo questo nella sua versione iniziale..
[HTML]/* creo un array che contiene tutte le parole che voglio vietare di inserire nel form*/
$parolacce=array('mer...','merdacc...','merdi...','merd...');
/cicla ogni parola presente nell'array e assegna ogni valore alla variabile/
foreach($parolacce as $parolaccia)
{
$pos= strrpos($testo_form, $parolaccia);
}
if ($pos === false ){
//Nessuna parolaccia, fai quello che devi
}else{
//regolati di conseguenza!
}
[/HTML]
-
Prova a postarci lo script con 7-8 parole per vedere dove non funziona...
-
Ehmm...
Cosa vi posto tutte le parolacce?
non mi pare molto carino.Comunque il codice che ho sul mio sito è uguale a quello postato, basta aggiungere parole all'array.
Ho anche provato a cambiare l'ordine delle parole nell'array, ma non cambia nulla.Vi allego il codice che sto usando con tutte le parolacce in un file di testo cosi evito di sporcare il forum.
Ciao Grazie
-
Se hai PHP5 nel ciclo foreach prova a scrivere &$parolaccia
-
@alebal said:
Ehmm...
Cosa vi posto tutte le parolacce?
non mi pare molto carino.Certo che no... bastava mettere delle parole tipo mare, fiori, luna, ecc... al posto delle parolacce.
Detto ciò, il problema è che se in $testo_form l'ultima parola non è da filtrare (cioè non è una parolaccia) $pos torna a false, anche se il testo precedente è pieno di parole da filtrare... e salta tutto lo script. Prova con:
$alert=0;
foreach($parolacce as $parolaccia) {
$pos= strrpos($testo_form, "/\b".$parolaccia."(?i)\b/i");
//$pos = strrpos($testo_form, $parolaccia);
if ($pos === true && $alert==0)
***$alert=1; ***
}
if ($alert == 0){
//Nessuna parolaccia, fai quello che devi
echo "Trovato!!! - ".$testo_form;
}else{
echo "Non trovato -".$testo_form;
//regolati di conseguenza!
}...dovrebbe funzionare. La logica è abbastanza chiara: solo la prima volta che viene trovata una parolaccia $alert viene messo a 1 senza possibilità di tornare a 0 e il controllo finale lo faccio proprio su $alert.
Provalo e facci sapere se fenziona...
-
Niente da fare, alert rimane sempre a 0 e mi rispponde sempre che ha trovato parolacce.
In una risposta precedente qualcuno mi suggeriva di mettere una & sul foreach in php5. Cambia qualcosa in php5? perche la &? e soprattutto dove la devo mettere? ho provato dentro al foreach prima di $parolaccia ma php risponde che non se l'aspettava.
-
ci è sfuggito strrpos, che non fa quello che vuoi... il comando giusto è strpos (con una sola r). Inoltre gli argomenti di strpos non erano specificati bene e l'if finale era invertito (mea culpa). Prova con:
$alert=0;
foreach($parolacce as $parolaccia) {
$pos = strpos($testo_form, $parolaccia);
if ($pos !== false && $alert==0)
***$alert=1; ***
echo $pos."-".$alert."-".$parolaccia."-<br>";
}
if ($alert == 0){
//Nessuna parolaccia, fai quello che devi
echo "Non Trovato!!! - ".$testo_form;
}else{
echo "Trovato -".$testo_form;
//regolati di conseguenza!
}e facci sapere!
-
In una risposta precedente qualcuno mi suggeriva di mettere una & sul foreach in php5. Cambia qualcosa in php5? perche la &? e soprattutto dove la devo mettere? ho provato dentro al foreach prima di $parolaccia ma php risponde che non se l'aspettava.E stata implementata solo nel PHP5 e assegna un riferimento all'array invece che copiare i valori e pensavo che bypassasse il problema
***foreach(&$parolacce as $parolaccia) ***
-
:ola:
FUNZIONA!!!!!
sON COSI CONTENTO CHE TRA UN Pò USO TUTTI GLI EMOTICONS POSSIBILIfINALMENTE DOPO TANTI LITIGI
:00016032:GRAZIE MILLE
E' STATA UNA LUNGA E DIFFICILE AVVENTURA MA SIAMO RIUSCITI A VENIRNE A CAPOGRAZIE A TUTTI PER L'AIUTO
cIAO
E ANCORA GRAZIE
-
Felice di esserti stato d'aiuto!
Secondo il regolamento:
3.6. E' da evitare l'inserimento di un numero eccessivo di emoticons.
Una loro eccessiva presenza, renderebbe comico il topic.
Tendenzialmente è bene non andare oltre le 3-4 smile per post di media lunghezza e comunque mai consecutivi.
Cerchiamo di evitare l'uso eccessivo di emoticons, così come l'uso del testo in maiuscolo che equivale, nel web, ad urlare...
-
Hai ragione scusa...
In questo topic mi son lasciato un pò prendere dall'emozione.
Non capiterà più.
Ciao e grazie ancora