PHP and JS Email Obfuscator
I have been using some great email obfuscation code created by Ross Killen ,Tim Williams and Andrew Moulden. And like Andrew’s generator that allows for “link text”, I needed a PHP solution for sites I’m developing. So here’s my twist:
function munge($address,$link_text) { $address = strtolower($address); $coded = ""; $unmixedkey = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789.@-_"; $inprogresskey = $unmixedkey; $mixedkey=""; $unshuffled = strlen($unmixedkey); for ($i = 1; $i <= strlen($unmixedkey); $i++) { // set i = 1 because i = 0 was throwing an offset error in PHP $ranpos = rand(0,$unshuffled-1); $nextchar = $inprogresskey{$ranpos}; $mixedkey .= $nextchar; $before = substr($inprogresskey,0,$ranpos); $after = substr($inprogresskey,$ranpos+1,$unshuffled-($ranpos+1)); $inprogresskey = $before.''.$after; $unshuffled -= 1; } $cipher = $mixedkey; $shift = strlen($address); $txt = "<script type=\"text/javascript\" language=\"javascript\">\n" . "<!-"."-\n" . "// Email obfuscator script 2.1 by Tim Williams, University of Arizona\n". "// Random encryption key feature by Andrew Moulden, Site Engineering Ltd\n". "// PHP version coded by Ross Killen, Celtic Productions Ltd\n". "// This code is freeware provided these six comment lines remain intact\n". "// A wizard to generate this code is at http://www.jottings.com/obfuscator/\n". "// The PHP code may be obtained from http://www.celticproductions.net/\n\n"; for ($j=0; $j<strlen($address); $j++) { if (strpos($cipher,$address{$j}) == -1 ) { $chr = $address{$j}; $coded .= $address{$j}; } else { $chr = (strpos($cipher,$address{$j}) + $shift) % strlen($cipher); $coded .= $cipher{$chr}; } } if($link_text): $link_text_block = "document.write(\"<a href='mailto:\"+link+\"'>" . $link_text . "</a>\")\n"; else: $link_text_block = "document.write(\"<a href='mailto:\"+link+\"'>\"+link+\"</a>\")\n"; endif; $txt .= "\ncoded = \"" . $coded . "\"\n" . " key = \"".$cipher."\"\n". " shift=coded.length\n". " link=\"\"\n". " for (i=0; i<coded.length; i++) {\n" . " if (key.indexOf(coded.charAt(i))==-1) {\n" . " ltr = coded.charAt(i)\n" . " link += (ltr)\n" . " }\n" . " else { \n". " ltr = (key.indexOf(coded.charAt(i))-shift+key.length) % key.length\n". " link += (key.charAt(ltr))\n". " }\n". " }\n". // Original link markup //"document.write(\"<a href='mailto:\"+link+\"'>\"+link+\"</a>\")\n" . // Link markup from above $link_text_block . "\n". "//-"."->\n" . "<" . "/script><noscript>Please turn on javascript to email me." . "<"."/noscript>"; return $txt; }Published on October 16, 2013