[PHP] Script per censurare parole

webmachine

Utente Attivo
12 Gen 2016
43
0
6
Ciao a tutti, ho la necessità di creare uno script che dato un testo in input sostituisca con degli * le parole pre-scelte.

Non voglio però che tutta la parola sia sostituita bensì solo le lettere centrali, vi faccio un esempio:
Se la parola da nascondere è SCIOCCO, dovrà apparire S*****O
Ovvero mantenere la prima e l'ultima lettera e poi al centro n *, in base alla qta di lettere.

Sapreste aiutarmi? Grazie
 
prova questo: ho provato con una frase di prova (scusa il gioco di parole) contenente tre parole 'proibite' che sono steate correttamente sostituite. Spero sia quello che intendevi.


PHP:
<?php
$frase = 'cavolo, mi sono comportato da sciocco, scusami, sono un cretino';
preg_match_all('/(sciocco|cretino|cavolo)/',$frase,$result);
$numeri = $result[0];
$nrocc = count($numeri);
$nuova_parola = array();


for ($ind=0;$ind<$nrocc;$ind++) {
     $lung = strlen($numeri[$ind]);
     $inizio = substr($numeri[$ind],0,1);
     $fine = substr($numeri[$ind],$lung-1);
     $nuovaparola = $inizio;
     for ($indice=1;$indice<$lung-1;$indice++) {
          $nuovaparola .= '*';
     }
     $nuovaparola.=$fine;
     $nuova_parola[$ind] = $nuovaparola;
}


//SOSTITUZIONE

$fraseorig = $frase;
$frase = str_replace($numeri,$nuova_parola,$frase);
echo $fraseorig.'<br>'.$frase.'<br>';
?>


Zorro
 
PHP:
$testo='Testo sciocco da parsare al manzo';
$parole_censurate=['sciocco','bello','manzo'];
foreach($parole_censurate as $items){
    $new_label=substr($items,0,1);
         for($i=0;$i<strlen($items)-2;$i++)$new_label.='*';
     $new_label.=substr($items,strlen($items)-1,1);    
     $testo=str_replace($items,$new_label,$testo);
}
Dovrebbe essere più compatto e veloce....
 
PHP:
$testo='Testo sciocco da parsare al manzo';
$parole_censurate=['sciocco','bello','manzo'];
foreach($parole_censurate as $items){
    $new_label=substr($items,0,1);
         for($i=0;$i<strlen($items)-2;$i++)$new_label.='*';
     $new_label.=substr($items,strlen($items)-1,1);   
     $testo=str_replace($items,$new_label,$testo);
}
Dovrebbe essere più compatto e veloce....

Ciao Macus_adi,
grazie mille per la risposta.

Il 'probolema' di entrambi gli script è che sono case sensitive, ovvero viene censurato cavolo ma non Cavolo o cavOlo.
Ora sto utilizzando uno script simile al tuo ma ovviamente prima rendo tutto minuscolo.

Avete delle soluzioni per 'ripristinare' oppure addirittura non variare le maiuscole/minuscole?

Grazie
 
ciao
prova
PHP:
<?php
$pat=array('scemo','cretino');
$sot="***";
$frase="se scemo &eacute; Cretino e cretino &eacute; Scemo sostituisco con asterischi";

$corretta=str_ireplace($pat,$sot,$frase);//ireplace case insensitive

echo $corretta;// se *** é *** e *** é *** sostituisco con asterischi
?>
 

Discussioni simili