si scusa, mi sono dimenticato di scriverti una modifica :devi aggiungere la "e"codice:$wRex = '/\b('.$wRex.')\b/ie';![]()
si scusa, mi sono dimenticato di scriverti una modifica :devi aggiungere la "e"codice:$wRex = '/\b('.$wRex.')\b/ie';![]()
dA .. foto di viaggio
L'esperienza č il tipo di insegnante pių difficile.
Prima ti fa l'esame, e poi ti spiega la lezione.
ancora niente...
http://www.modelliemodelle.it/messwall.php?page=11
messaggio delle 10.05
Ciao!
boh, a me funziona ... ti riposto il codice, se non ti funziona postami la parte di codice come l'hai messa nella paginaOcchio che le parole messe in $censor_word devono essere separate dalla virgola.codice:function cBack($str){ return preg_replace('/\B\w\B/','*',$str); } $censor_word ='sōla, pippa, schiappa'; $wRex = preg_replace('/\s*,\s*/','|',trim($censor_word)); // commenti o decommenti la riga seguente in base // al tipo di riconoscmento che vuoi effettuare $wRex = preg_replace('/(\b\w|\w\b|\B(\w)\\2+\B)/','$1+',$wRex); $wRex = '/\b('.$wRex.')\b/ie'; // ..... // ..... echo $new_mess_body = preg_replace($wRex,"cBack('$0')",$mess_body);
dA .. foto di viaggio
L'esperienza č il tipo di insegnante pių difficile.
Prima ti fa l'esame, e poi ti spiega la lezione.
config.inc.php
Codice PHP:function cBack($str){
return preg_replace('/\B\w\B/','*',$str);
}
$censor_word = "cazzo, figa, fica, puttana";
$wRex = preg_replace('/\s*,\s*/','|',trim($censor_word));
// commenti o decommenti la riga seguente in base
// al tipo di riconoscmento che vuoi effettuare
$wRex = preg_replace('/(\b\w|\w\b|\B(\w)\\2+\B)/','$1+',$wRex);
$wRex = '/\b('.$wRex.')\b/ie';
messwall.php
Codice PHP:$mess_body = preg_replace($wRex, cBack('$0'), $mess_body);
Ciao!
Trovato!!!
ho rimesso gli apici doppi!!!
![]()
Ciao!
posso chiederti una cosa?
premetto che non ho capito nulla del codice che mi hai dato, l'ho semplicemente "copincollato" nella mia pagina, mi potresti dare le modifiche per asteriscare tutta la parola, tutta la parola tranne la prima lettera e tutta la parola tranne la prima e l'ultima lettera?
mi saresti di grande aiuto, visto che mi piace sapere le cose che faccio, se mi commentassi la sintassi delle espressioni regolari.
spero di non chiedere troppo!
grazie mille!!!
![]()
Ciao!
Ho modificato la funzione cBack() in modo che esegua le tre tipologie di sostituzione, basta che sostituisci quella. Per quanto riguarda i commenti, m'č venuto un po' un papiro, se no non si capiva nulla. Spero che almeno sia chiaro. In caso chiedi pure![]()
Allora, la prima parte di codice serve a trasformare ad esempio 'sōla, pippa, schiappa' in 'sōla|pippa|schiappa' usando questo criterio di sostituzione:
\s* : (0 o + occorrenze di ogni carattere non visibile: spazi,\r,\n,\t,etc), la virgola e di nuovo \s*codice:/\s*,\s*/
Cosė si tolgono anche eventuali spazi vuoti/a capo non voluti.
E lo sostituiamo col carattere pipe |, che č loperatore OR nella sintassi delle regexp. In questo modo, se chiudessimo la stringa modificata tra parantesi tonde (sōla|pippa|schiappa) la regexp cercherebbe tutte le parole suddivise dallOR.
La regexp successiva:
Ora vogliamo prevedere eventuali storpiature banali, quindi ipotizziamo che possano essere raddoppiate le lettere iniziali, le doppie e le finali:codice:/(\b\w|\w\b|\B(\w)\\2+\B)/
Sono tre opzioni quindi le dividiamo con loperatore OR |.
1Ē opz.:\w č una classe di caratteri come [a-z] (e come \s), ma comprende tutti i caratteri alfanumerici e lunderscore _, mentre \W č il suo negato [^\w], cioč qualsiasi carattere diverso da \w.codice:\b\w
\b invece č unasserzione allindietro o in avanti, č un criterio che indica il primo carattere (se lo precede) o lultimo (se lo segue) di una parola. \B č il suo negato.
Quindi \b come prefisso a \w, cioč \b\w, indica il primo carattere di una parola.
2Ē opz.:indica lultimo carattere di una parola.codice:\w\b
3Ē opz.:Sottoregole: sono racchiuse dalle parentesi tonde(), quindi (\w) cerca un carattere alfanumerico e lo memorizza in una variabile che puō essere utilizzata sia nella regexp stessa, come riferimento allindietro (si indica \\1,\\2,\\3,etc) il numero č progressivo contando le parantesi tonde aperte, sia nella stringa di sostituzione (\\1 , ma anche $1,$2,etc). In questo caso ci interessa il riferimento allindietro. Per beccare le doppie allinterno di una parola quindi usiamo \B(\w), sottoregola che memorizza un carattere che non sia allinizio di una parola, e ci attacchiamo il riferimento allindietro relativo a quella stessa sottoregola, che inquesto caso č la 2Ē sottoregola, quindi \B(\w)\\2\B.codice:\B(\w)\\2\B
(\w)\\2 č verificato quando \w č uguale a \\2.
Tutta la regexp č racchiusa dalle parentesi tonde che specificano la 1Ē sottoregola, richiamata in fase di sostituzione con $1. Il risultato finale č:
I + indicano quali lettere possono essere ripetute (1 o pių occorrenze)codice:/\b(s+ōla+|p+ipp+a+|s+chiapp+a+)\b/ie
le \b servono ad impedire che vengano censurate parole tipo sōlaio, mentre "ie" sono due modificatori di criterio, "i" rende la ricerca insensibile alle maiuscole/minuscole mentre "e" , eval, valuta come codice php la stringa passata come replacement ed č per questo che la funzione cBack() deve stare tra vigolette.
Infine la funzione cBack, a cui arriva una parola singola alla volta... che non avra spero bisogno di spiegazioni
Il secondo parametro della funzione lo passi solo se vuoi usare il caso 1 o 2.codice:function cBack($str,$mode=false){ if ($mode==1) $rex = '/\B\w/'; else if($mode==2) $rex = '/\w/'; else $rex = '/\B\w\B/'; return preg_replace($rex,'*',$str); }
dA .. foto di viaggio
L'esperienza č il tipo di insegnante pių difficile.
Prima ti fa l'esame, e poi ti spiega la lezione.