Visualizzazione risultati 1 fino 6 di 6

Discussione: Filtro parolacce (problema case sensitive)

  1. #1
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Unhappy Filtro parolacce (problema case sensitive)

    Ciao a tutti, sto instaurando una funzione per eliminare le parolacce nei commenti.
    Ecco la funzione che utilizzo per ora.
    Codice PHP:
    $sostituisci_commenti = array(
    'parolaccia' => '***'
    );
    $commento = strtolower($commento);
    $commento = strtr($commento, $sostituisci_commenti);
    Il problema è che lo script converte, giustamente, tutto il commento in minuscolo.
    Se levassi quella riga, lo script non riconoscerebbe "pArolaccia", ad esempio, e non la convertirebbe in "***".
    Soluzioni? :-D:
    Grazie!

  2. #2
    L'avatar di alemoppo
    alemoppo non è connesso Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,762

    Predefinito

    Ma appunto, non hai usato strtolower() per evitare il problema?

    Cioè, se uno scrive "pArolaccia", strtolower() lo trasforma in "parolaccia", quindi la strtr la sostituisce...

    Non ho capito...

    Ciao!

  3. #3
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Sì, il problema è che il codice trasforma tutto il commento in minuscolo.
    Se è possibile (problema secondario), "parolaccia" viene trasformata in "par***ccia", quindi se uno scrive "pArolaccia" vorrei che diventasse "pAr***ccia".
    Grazie!

  4. #4
    L'avatar di dementialsite
    dementialsite non è connesso Super Moderatore
    Data registrazione
    19-10-2004
    Residenza
    fuori Padova
    Messaggi
    5,046

    Predefinito

    Dovresti usare preg_replace() passando come parametri:
    - nel primo l'array con le sole "badwords" in forma di pattern case-insensitive (ovvero '/badword/i')
    - nel secondo, a tua scelta: o un array con i rispettivi sostituti (a pari indice avviene la sostituzione), oppure una stringa unica di sostituzione (in questo caso, tutte le badword saranno sostituite dalla stessa stringa)

    In definitiva, questo codice dovrebbe funzionare come richiesto:
    Codice PHP:
    $badwords = array ('/badword1/i', '/badword2/i', ...);
    $replacers = array ('replacer1', 'replacer2', ...);

    // prima versione
    $stripped = preg_replace ($badwords, $replacers, $comment);

    // seconda versione (tutte le badword rimpiazzate dalla stessa parola)
    $stripped2 = preg_replace ($badwords, '[censura]', $comment);
    Stammi bene...
    Le questioni tecniche hanno risposte migliori nel forum pubblico, non trovi?

    When you don't know your next step... improvise

    ALTERVISTA WANTS YOU!
    Vuoi diventare moderatore su AlterVista? Scopri come...

  5. #5
    Guest

    Predefinito

    Citazione Originalmente inviato da radiodelmomento Visualizza messaggio
    Sì, il problema è che il codice trasforma tutto il commento in minuscolo.
    Se è possibile (problema secondario), "parolaccia" viene trasformata in "par***ccia", quindi se uno scrive "pArolaccia" vorrei che diventasse "pAr***ccia".
    Grazie!
    Tipo così?
    Codice PHP:
    $commento = preg_replace("/(par)(ola)(ccia)/i", "$1***$3", $commento);

  6. #6
    L'avatar di radiodelmomento
    radiodelmomento non è connesso AlterGuru
    Data registrazione
    09-09-2010
    Messaggi
    1,075

    Predefinito

    Grazie ad entrambi, ho provato mantenendo il mio metodo (che mi sembrava più pulito) ma non funziona.
    Codice PHP:
    // non funziona né questo
    '/(par)(ola)(ccia)/i' => '$1***$3'
    // né questo
    '/parolaccia/i' => 'par***ccia'
    Grazie.

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •