Artikelen

PHP hide_email()

Gepost door maurits op 20 mrt 2010 in de categorie PHP HTML

In dit artikel wordt een PHP function beschreven die e-mailadressen die je op je website publiceert beschermt tegen bots en spiders die e-mailadressen zoeken en verzamelen voor het versturen spam. De functie maakt gebruik van een substitutie cipher die van sleutel wisselt elke keer dat de pagina geladen wordt.


Hoe werkt het?

PHP versleuteld je e-mailadres en genereert de javascript code om het te ontcijferen. De meeste bots en spiders kunnen geen javascript code uitvoeren en dat zorgt ervoor dat dit systeem werkt.  Een bezoek van de website zal niet merken dat het script wordt gebruikt, tenzij deze javascript uitgeschakeld heeft. In dat geval zal de bezoeker de mededeling "[javascript protected email address]" in plaats van het e-mailadres op de pagina zien staan.


De code

Hieronder staat de code.

  1. <?php function hide_email($email) {
  2. $character_set = '+-.0123456789@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz';
  3. $key = str_shuffle($character_set); $cipher_text = ''; $id = 'e'.rand(1,999999999);
  4. for ($i=0;$i<strlen($email);$i+=1) $cipher_text.= $key[strpos($character_set,$email[$i])];
  5. $script = 'var a="'.$key.'"; var b=a.split("").sort().join(""); var c="'.$cipher_text.'"; var d="";';
  6. $script.= 'for(var e=0;e<c.length;e++)d+=b.charAt(a.indexOf(c.charAt(e)));';
  7. $script.= 'document.getElementById("'.$id.'").innerHTML="<a href=\\"mailto:"+d+"\\">"+d+"</a>"';
  8. $script = "eval(\"".str_replace(array("\\",'"'),array("\\\\",'\"'), $script)."\")";
  9. $script = '<script type="text/javascript">/*<![CDATA[*/'.$script.'/*]]>*/</script>';
  10. return '<span id="'.$id.'">[javascript protected email address]</span>'.$script;
  11. } ?>

De "hide_email()" PHP functie bestaat uit slechts uit deze 9 regels code (licentie: public domain) die je ergens in je PHP file moet neerzetten. Op de plek waar je vervolgs het e-mailadres wilt weergeven moet je de functie als volgt gebruiken:

  1. <?php echo hide_email('test@test.com'); ?>


Effectiviteit

Ik heb dit op meerdere sites in gebruik en tot nu toe werkt het erg goed. Ik geef geen garanties voor de toekomst.

Originele (Engelstalige) artikel





Terug