Ciao a tutti,

se vi siete stufati di ricevere spamming negli indirizzi e-mail che pubblicate nelle vostre pagine forse potete trovare utile questa soluzione.

L'indirizzo e-mail viene criptato con PHP e decriptato con Javascript on-the-fly

codice:
class MailEncoder
{
  function MailEncoder($baseString)
  {
      $this->baseStr = $baseString ;
      //separo la stringa in un array di caratteri
      $arrayChars = preg_split('//', $baseString, -1, PREG_SPLIT_NO_EMPTY);
      
      //ordino  l'array in modo casuale
      mt_srand((float)microtime() * 1000000);
      shuffle($arrayChars) ;
      
      //ricreo la stringa
      $this->encodedStr = implode('', $arrayChars) ;
  }
  
  function encode($mailAddr)
  {
    //"cripta" l'indirizzo
    $len = strlen($mailAddr) ;
    $crypted = '' ;
    for($i=0; $i<$len; $i++)
    {
       $crypted.= $this->encodedStr{strpos($this->baseStr, $mailAddr{$i})} ;
    }
    return($crypted) ;
  }
  
  function jsCode()
  {
     //il codice JS da inserire nell'head della pagina
     $jsStr = "var CONFIGkeyStr = '0123456789:@.-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' ; \n
               var ENCODEDStr = '{$this->encodedStr}' ; \n
               function mailDecode(encodedMail)
               {
                   var decoded = '' ;

	           for(var i=0; i<encodedMail.length; i++)
                   {
                     decoded += CONFIGkeyStr.charAt(ENCODEDStr.indexOf(encodedMail.charAt(i))) ;
                   }
	           return(decoded);
               } \n
               
               function sendMail(encoded)
               {
                  document.location.href='mailto:'+mailDecode(encoded) ;
               } \n
               
               function viewMail(encoded)
               {
                  return('Scrivi a ' + mailDecode(encoded)) ;
               }
               " ;

              
     return($jsStr) ;
  }
  
  function jsLink($email, $text, $cssClass='')
  {
     //Genera il link con il mailto
      $encoded = $this->encode($email) ;

      $link = '<a href="javascript:void(0)" class="'.$cssClass.'"' .
      
              ' onClick="sendMail(\''.$encoded.'\')" onMouseOver="this.title=viewMail(\''.$encoded.'\')" title=\'\'">' .
      
              $text.'</a>';
      
      return($link) ;
  }
}

?>
Esempio

codice:
<?php
include('MailEncoder.php') ;

$CONFIGkeyStr = '0123456789:@.-_ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';

$antispam = new MailEncoder($CONFIGkeyStr) ;

?>
<html>
<head>
<script>
<?php echo($antispam->jsCode()) ;?>
</script>

</head>
<body>

<?php echo $antispam->jsLink('tuo_indirizzo@host.it','cliccami','pippoCss') ?>
</body>
</html>
Lo potete vedere operativo (in realtà in quel caso l'ho fatto po' diverso perchè freephp non utilizza PHP) negli articoli di freephp.html.it

Fino a quando, spero mai, gli spider che cacciano indirizzi sul WEB non integreranno un motore Javascript, con questo sistema siamo al sicuro.