Najpierw adres jest kodowany za pomocą urlencode
(do postaci %xx
), a następnie zamieniany na dziesiętne i szesnastkowe encje HTML. Losowe znaki pozostają nieruszone dla urozmaicenia, a na zasmażkę w środku komentarz HTML.
Jedyny znany efekt uboczny: IE pokazuje syfną wersję na statusbarze (dowód na podchwytliwość metody, czy denność IE? ;) Inne przeglądarki tylko straszą %40
zamiast @
.
Na dzień dzisiejszy to kodowanie nie jest już 100% skuteczne, ale za to nie ma efektów ubocznych, które by były uciążliwe dla użytkowników.
Enkoder dostępny jest on-line.
<?php
function enkoduj($m,$url=true)
{
$o='';
if ($url)
{
for($i=0;$i<strlen($m);$i++)
{
$o .= (rand(0,100) > 60 || !ctype_alnum($m{$i}))?sprintf('%%%02x',ord($m{$i})):$m{$i};
}
$m = 'mailto:'.$o; $o='';
}
for($i=0;$i<strlen($m);$i++)
{
if (!$url && $i==strlen($m)>>1) $o .= '<!--mailto:eat_my_shorts@microsoft.com-->';
$o .= (rand(0,100) > 40 || $m{$i}=='.')?sprintf((rand(0,100) > 50)?'&#%d;':'&#x%X;',ord($m{$i})):$m{$i};
}
return $o;
}
$addr = 'test@example.com';
echo '<a title=\'e-mailuj!\' href="'.enkoduj($addr).'">'.enkoduj($addr,false).'</a>';