Trasformare eregi in preg_match

di seren il
4 risposte
Ciao a tutti, chiedo aiuto per un programma che ha funzione eregi se sposto il programma in php 7 non funziona più perchè deprecato.
Non sono in programmatore e chiedo scusa per la mia incompetenza.
Chiedo aiuto per trasformare la parte eregi in preg_match
la parte del programma è questa

function is_spam($string) {
$data = "spamwords.dat";
$is_spam = false;
if (file_exists($data)) {
$spamword = file($data);
$jmlrec = count($spamword);
for ($i=0; $i<$jmlrec; $i++) {
$spamword[$i] = trim($spamword[$i]);
if (eregi($spamword[$i],$string)) {
$is_spam = true;
break;
}
}
}
return $is_spam;


ho provato a sostituire la riga così
if (preg_match('/$spamword[$i]/',$string)) {

ma va la pubblicazione dei moduli ma non va la funzione spamword che praticamente bloccava la pubblicazione di parole delicate come le parolacce

chiedo aiuto se possibile grazie a tutti per un possibile aiuto
serena

4 Risposte

  • Ciao buongiorno Seren.
    la regex di PCRE compatibile in php da eregi va trasformata in
    $regex = '/' . str_replace('/', '\\/', $spamword[$i]) . '/i';
    la i sta per senza distinzione tra maiuscole e minuscole. (Giustamente quando è dentro il primo parametro di preg_match), ovvio qui la variabile si chiama $regex e quindi il tuo if usa questo invece di modificare ulteriormente l'altra variabile.
  • Grazie, scusa ho provato meglio. in un primo momento mi sembrava funzionasse perchè avevo provato con il pubblicare una parola proibita da spamword ma in realtà non va più nessun modulo, se inserisco un modulo senza parolacce anche questo non viene pubblicato. Grazie se mi puoi aiutare ancora. O forse è tutto il resto del programma da rivedere nel cambio da php 5 alla versione 7... $regex può funzionare sulla 5 se faccio delle prove? perchè con la riga che mi hai indicato i moduli non vanno più né su versione 5 nè su versione 7. grazie sei stato gentilissimo a ripondermi.
  • [Code]function is_spam($string) { $data = "spamwords.dat"; $is_spam = false; if (file_exists($data)) { $spamword = file($data); $jmlrec = count($spamword); for ($i=0; $i<$jmlrec; $i++) { $spamword[$i] = trim($spamword[$i]); if (preg_match('/' . str_replace('/', '\\/', $spamword[$i]) . '/i',$string)) { $is_spam = true; break; } } } return $is_spam; } Stai utilizzando questa sintassi? (Compresa la quarta parentesi graffa di chiusura della funzione)
  • Grandioso! Grazie infinite Hormus! funziona tutto perfettamente dopo aver fatto copia e incolla del tuo testo. Grazie! va sia con il sito impostato in php 5 che con php 7. Grazie molto ti sono molto riconoscente! mi sto preparando per cambiare la versione al sito in php 7 e il tuo aiuto è stato importantissimo per me. Grazie ancora!!! Buona giornata. Serena
Devi accedere o registrarti per scrivere nel forum
4 risposte