Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 17
  1. #1

    Censura parle... riconosce anche parti di parole!!

    come da oggetto...

    se io devo censurare fica, mi censura anche classifica

    che diventano: **** e classi****

    come mai?

    il codice č questo:

    Codice PHP:
    $censorwords explode(",",$censor_word);

    foreach(
    $censorwords AS $parola){
                
    $parola trim($parola);
                
    $mess_body eregi_replace($parolastr_repeat(CENS_CHARstrlen($parola)), trim($mess_body));


    dove sbaglio nel riconoscimento della parola?


    Ciao!

  2. #2
    Non hai postato la parte fondamentale
    il contenuto di
    $censorwords

    č quello che devi cambiare

  3. #3
    pensavo si intuisse:

    Codice PHP:
    $censor_word "cazzo, figa, fica, puttana"
    per cui il codice controlla le singole parole...

    Codice PHP:
    $censorwords explode(",",$censor_word); 

    foreach(
    $censorwords AS $parola){ 
                
    $parola trim($parola); 
                
    $mess_body eregi_replace($parolastr_repeat(CENS_CHARstrlen($parola)), trim($mess_body)); 


    come devo fare per controllare le parole intere e non le parole composte??

    Ciao!

  4. #4
    La sintassi delle posix non la ricordo, con le PCRE basta costruire la regex racchiudendo ogni parola tra \b-parola-\b. Non specificandoli la reg exp ti sostituisce tutte le occorrenze, a prescindere che siano all'interno di una parola o meno. Una cosa tipo:
    codice:
    $censor_word ='sōla, pippa, schiappa';
    
    // sostiuisce il separatore virgola ed eventuali spazi 
    // con l'operatore OR
    $wRex = preg_replace('/\s*,\s*/','|',trim($censor_word));
    
    // racchiude tra le \b 
    $wRex = '/\b('.$wRex.')\b/i';
    
    
    echo preg_replace($wRex,"**cens**",$mess_body);
    Volendo provare a beccare anche se raddoppiano alcune lettere tipo le iniziali, le finali o le doppie ( una cosa tipo:
    'sei una sssssssschiapppppppppaaaaaaaaaaa',
    si potrebbe costruire la regexp cosė:
    codice:
    $censor_word ='sōla, pippa, schiappa';
    
    $wRex = preg_replace('/\s*,\s*/','|',trim($censor_word));
    $wRex = preg_replace('/(\b\w|\w\b|\B(\w)\\2+\B)/','$1+',$wRex);
    $wRex = '/\b('.$wRex.')\b/i';
    La sintassi \b indica l'inizio (se posto all'nizio) o la fine di una parola. Quindi \b-parola-\b cerca la parola esatta, mentre ad esempio se tu cercassi /\bporc\w+/i cercherebbe tutte le parole che cominciano con "porc" come porcozio, porcaloca, etc
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  5. #5
    VVoVe:

    e come devo scrivere il codice io???

    Ciao!

  6. #6
    Originariamente inviato da fmortara
    VVoVe:

    e come devo scrivere il codice io???


    Ti crei la tua lista di parole come facevi prima, separate dalle virgole:
    codice:
    $censor_word ='sōla, pippa, schiappa';
    Subito sotto costruisci la regexp
    codice:
    $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/i';
    Poi preg_replace lo metti dove ti pare, che so
    codice:
    while (blabla) {
    // eventuale codice
    echo preg_replace($wRex,"**cens**",$mess_body);
    // altro codice
    }
    
    
    
    
    
    /************* oppure  ********************/
    while (blabla) {
    // eventuale codice
    $new_mess_body = preg_replace($wRex,"**cens**",$mess_body);
    
    // altro codice
    echo $new_mess_body;
    
    // altro codice
    }
    dA .. foto di viaggio
    L'esperienza č il tipo di insegnante pių difficile.
    Prima ti fa l'esame, e poi ti spiega la lezione.

  7. #7
    ok, fatto...
    ma io vorrei un altra cosa se possibile, mettere tanti asterischi quante sono le lettere della parola che sostituisco...

    come fo??
    Ciao!

  8. #8
    il massimo sarebbe mantenere la prima e l'ultima lettera della parola...

    tipo f**a c***o!!

    si puō?
    Ciao!

  9. #9
    Per sostituire le lettere con gli asterischi occorre un'altra regexp. Aggiungi questa funzione:
    codice:
    function cBack($str){
    	return preg_replace('/\B\w\B/','*',$str);
    }
    
    
    $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.

  10. #10
    non va...

    senza doppi apici, non modifica nulla, con i doppi apici scrive cBack('parola')

    :master:
    Ciao!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.