{"id":1092,"date":"2011-05-02T20:12:38","date_gmt":"2011-05-02T19:12:38","guid":{"rendered":"http:\/\/www.donatantonio.net\/blog\/?p=1092"},"modified":"2011-05-03T19:53:16","modified_gmt":"2011-05-03T18:53:16","slug":"filtro-per-chat-in-php","status":"publish","type":"post","link":"https:\/\/www.donatantonio.net\/blog\/guide_tutorial\/php\/filtro-per-chat-in-php\/","title":{"rendered":"Filtro per Chat in PHP"},"content":{"rendered":"<p>Quando si realizza una chat in PHP o altro linguaggio \u00e8 necessario prevedere una funzione che effettui la <em>pulizia<\/em> dei messaggi inoltrati dagli utenti.<br \/>\nTale codice dovr\u00e0 intercettare le parole ritenute non legali e oscurarle in fase di visualizzazione.<\/p>\n<p>A tal proposito realizzeremo una funzione in PHP che chiameremo semplicemente <strong>filtro<\/strong>; la quale ammetter\u00e0 come parametro d&#8217;input una stringa di testo, contenente appunto il messaggio da filtrare.<br \/>\nLa nostra funzione sostituir\u00e0 le parole incriminate con degli asterischi, lasciando per\u00f2 inalterali il primo e l&#8217;ultimo carattere che la compongono.<br \/>\nSe ad esempio volessimo filtrare dal messaggio tutte le ricorrenze della parola <strong style=\"color: red;\">gratis<\/strong>, vedremmo al suo posto la parola: <strong style=\"color: red;\">g****s<\/strong>.<br \/>\nVediamo quindi il codice della funzione filtro:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n&lt;?php\r\n  $parole = &quot;gratis,sesso,acquista,visitami&quot;;\r\n\r\n  function filtro($testo){\r\n      global $parole;\r\n      $app = split(',',$parole);\r\n      for($i=0; $i&lt;count($app); $i++){\r\n          if(stripos($testo,$app[$i])!==false){\r\n              $sostituta = substr($app[$i],0,1);\r\n              for($j=1; $j&lt;strlen($app[$i])-1; $j++){\r\n                   $sostituta=$sostituta.'*';\r\n              }\r\n              $sostituta = $sostituta.substr($app[$i],-1);\r\n              $testo = str_ireplace($app[$i],$sostituta,$testo);\r\n          }\r\n      }\r\n      return $testo;\r\n  }\r\n?&gt;\r\n<\/pre>\n<p>La funzione utilizza essenzialmente cinque funzioni PHP per la manipolazione delle stringhe:<\/p>\n<p>&#8211; split<br \/>\n&#8211; stripos<br \/>\n&#8211; strlen<br \/>\n&#8211; substr<br \/>\n&#8211; str_ireplace<\/p>\n<p>Da notare innanzitutto la presenza di una variabile <strong>parole<\/strong> definita a livello globale, che conterr\u00e0 appunto la sequenza di parole, separate da virgola(,), da filtrare.<br \/>\n<span style=\"text-decoration: underline;\">Per personalizzare il codice \u00e8 sufficiente aggiungere le stringhe da filtrare nella variabile parole.<\/span><br \/>\nTornando alla funzione, vediamo per grandi linee le operazioni che essa effettua sul testo in input:<\/p>\n<ol>\n<li> Preleva tutte le parole da filtrare (split)<\/li>\n<li> Cerca ciascuna parola nel messaggio di input (stripos)<\/li>\n<li> Realizza una parola sostitutiva calcolata sulla lunghezza dell&#8217;originale (strlen)<\/li>\n<li> La parola sostitutiva mantiene il carattere iniziale e finale dell&#8217;originale (substr)<\/li>\n<li> La parola incriminata viene sostituita (str_ireplace)<\/li>\n<\/ol>\n<p>Infine il messaggio viene restituito <em>pulito<\/em>.<br \/>\nLa funzione, una volta salvata in un file separato(ad esempio filtro.php) verr\u00e0 cos\u00ec invocata:<\/p>\n<pre class=\"brush: php; title: ; notranslate\" title=\"\">\r\n\/\/ Richiamo alla funzione\r\nrequire('filtro.php');\r\n\r\n\/\/ Chiamata alla funzione su testo $messaggio\r\n$stringa_pulita = filtro($messaggio);\r\n<\/pre>\n<p>La funzione pu\u00f2 tornare molto utile anche qualora si desiderasse eliminare dal messaggio link o url poco graditi. Baster\u00e0, come gi\u00e0 detto sopra, aggiungere le stringhe da controllare alla variabile globale <strong>$parole<\/strong>, prestando attenzione a separare ciascuna da una virgola.<\/p>\n<p><strong>Cliccando <a href=\"http:\/\/www.donatantonio.net\/script\/filtro_per_chat\/\">qui<\/a><\/strong> \u00e8 possibile vedere in azione il codice.<\/p>\n<p><strong>Cliccando <a href=\"http:\/\/www.donatantonio.net\/script\/filtro_per_chat.rar\">qui<\/a><\/strong> \u00e8 possibile scaricare il codice.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Quando si realizza una chat in PHP o altro linguaggio \u00e8 necessario prevedere una funzione che effettui la <em>pulizia<\/em> dei messaggi inoltrati dagli utenti.<br \/>\nTale codice dovr\u00e0 intercettare le parole ritenute non legali e oscurarle in fase di visualizzazione.<\/p>\n<p>A tal proposito realizzeremo una funzione in PHP che chiameremo semplicemente filtro; la quale ammetter\u00e0 come parametro d&#8217;input una stringa di testo, contenente appunto il messaggio da filtrare.<br \/>\nLa nostra funzione sostituir\u00e0 le parole incriminate con degli asterischi, lasciando per\u00f2 inalterali il primo e l&#8217;ultimo carattere che la compongono.<br \/>\nSe ad esempio volessimo filtrare dal messaggio tutte le ricorrenze della parola gratis, vedremmo al suo posto la parola: g****s.<br \/>\nVediamo quindi il codice della funzione filtro:<\/p>\n<p>&lt;?php<br \/>\n  $parole = &quot;gratis,sesso,acquista,visitami&quot;;<\/p>\n<p>  function filtro($testo){<br \/>\n      global $parole;<br \/>\n      $app = split(&#8216;,&#8217;,$parole);<br \/>\n      for($i=0; $i&lt;count($app); $i++){<br \/>\n          if(stripos($testo,$app[$i])!==false){<br \/>\n              $sostituta = substr($app[$i],0,1);<br \/>\n              for($j=1; $j&lt;strlen($app[$i])-1; $j++){<br \/>\n                   $sostituta=$sostituta.&#8217;*&#8217;;<br \/>\n              }<br \/>\n              $sostituta = $sostituta.substr($app[$i],-1);<br \/>\n              $testo = str_ireplace($app[$i],$sostituta,$testo);<br \/>\n          }<br \/>\n      }<br \/>\n      return $testo;<br \/>\n  }<br \/>\n?&gt;<\/p>\n<p>La funzione utilizza essenzialmente cinque funzioni PHP per la manipolazione delle stringhe:<\/p>\n<p>&#8211; split<br \/>\n&#8211; stripos<br \/>\n&#8211; strlen<br \/>\n&#8211; substr<br \/>\n&#8211; str_ireplace<\/p>\n<p>Da notare innanzitutto la presenza di una variabile parole definita a livello globale, che conterr\u00e0 appunto la sequenza di parole, separate da virgola(,), da filtrare.<br \/>\nPer personalizzare il codice \u00e8 sufficiente aggiungere le stringhe da filtrare nella variabile parole.<br \/>\nTornando alla funzione, vediamo per grandi linee le operazioni che essa effettua sul testo in input:<\/p>\n<p> Preleva tutte le parole da filtrare (split)<br \/>\n Cerca ciascuna parola nel messaggio di input (stripos)<br \/>\n Realizza una parola sostitutiva calcolata sulla lunghezza dell&#8217;originale (strlen)<br \/>\n La parola sostitutiva mantiene il carattere iniziale e finale dell&#8217;originale (substr)<br \/>\n La parola incriminata viene sostituita (str_ireplace)<\/p>\n<p>Infine il messaggio viene restituito <em>pulito<\/em>.<br \/>\nLa funzione, una volta salvata in un file separato(ad esempio filtro.php) verr\u00e0 cos\u00ec invocata:<\/p>\n<p>\/\/ Richiamo alla funzione<br \/>\nrequire(&#8216;filtro.php&#8217;);<\/p>\n<p>\/\/ Chiamata alla funzione su testo $messaggio<br \/>\n$stringa_pulita = filtro($messaggio);<\/p>\n<p>La funzione pu\u00f2 tornare molto utile anche qualora si desiderasse eliminare dal messaggio link o url poco graditi. Baster\u00e0, come gi\u00e0 detto sopra, aggiungere le stringhe da controllare alla variabile globale $parole, prestando attenzione a separare ciascuna da una virgola.<\/p>\n<p>Cliccando qui \u00e8 possibile vedere in azione il codice.<\/p>\n<p>Cliccando qui \u00e8 possibile scaricare il codice.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[27],"tags":[232,231,236,233,235],"_links":{"self":[{"href":"https:\/\/www.donatantonio.net\/blog\/wp-json\/wp\/v2\/posts\/1092"}],"collection":[{"href":"https:\/\/www.donatantonio.net\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.donatantonio.net\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.donatantonio.net\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.donatantonio.net\/blog\/wp-json\/wp\/v2\/comments?post=1092"}],"version-history":[{"count":0,"href":"https:\/\/www.donatantonio.net\/blog\/wp-json\/wp\/v2\/posts\/1092\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.donatantonio.net\/blog\/wp-json\/wp\/v2\/media?parent=1092"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.donatantonio.net\/blog\/wp-json\/wp\/v2\/categories?post=1092"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.donatantonio.net\/blog\/wp-json\/wp\/v2\/tags?post=1092"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}