Vi kender allesammen problematikken: Vores besøgnende skal kunne læse og klikke på vores mailadresse, men vi vil helst ikke at spam-robotterne læser linket og sender os spam.

Nedenstående kode er i store dele taget fra Zack Perdue’s fine blogpost “3 Clever Ways To Protect Your Email From Spammers“, men jeg har rettet koden lidt til da jeg fik nogle fejl med koden hvis ikke funktionerne blev fodret med en mailadresse.

/*
 * Obfuscate emails / use with "echo mailto($email)"
 */
function obfuscate($string) {
   $safe = '';
   foreach (str_split($string) as $letter) {
      switch (rand(1, 3)) {
         // HTML entity code
         case 1:
         $safe .= '&#'.ord($letter).';';
         break;
         // Hex character code
         case 2:
         $safe .= '&#x'.dechex(ord($letter)).';';
         break;
         // Raw (no) encoding
         case 3:
         $safe .= $letter;
      }
   }
   return $safe;
}

function email($email) {
   // Make sure the at sign is always obfuscated
   return str_replace('@', '@', obfuscate($email));
}

function mailto($email, $title = NULL) {
   // Obfuscate email address
   if($email) {
      $email = email($email);
      if ($title === NULL) {
         // Use the email address as the title
         $title = $email;
      }
      return '<a href="&#109;&#097;&#105;&#108;&#116;&#111;&#058;'.$email.'">'.$title.'</a>';
      } else {
      return '';
   }
}

Ovenstående implementation bruger jeg flittigt i kombination med WordPress Plugins der ikke håndterer dette af sig selv. Dette er fx tilfældet med “The Events Calendar“.