- Home
- Categorie
- Coding e Sistemistica
- PHP
- filtro parole in php
-
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