Как защитить E-mail на сайте от спама?

Проблема защиты от спама емейлов, выложенных на сайте, уже наболевшая и давно затертая до дыр. Но я случайно нашел еще один способ борьбы.
Можно, конечно, использовать следующие способы защиты:
— Графическое изображение
— Замену символов. Типа spam[at]must[dot]die
— Вывод через js вида

 

var login = 'spammer';
var server = 'must.die';
var email = login+'@'+server;
var url = 'mailto:'+email;
document.write(''+email+'');

— можно использовать простенький вывод _код_символа; на php:

$email = 'spammer@must.die';
$url = 'mailto:spammer@must.die';
$safe_email=$safe_url='';
for($i=0; $i<strlen($email); $i++){ $safe_email .= '&#'.ord($email{$i}).';';
}
for($i=0; $i<strlen($url); $i++){ $safe_url .= '&#'.ord($url{$i}).';';
}
print "$safe_email";

Когда для моего последнего проекта print-com.biz нужно было сделать защиту
выкладываемого мыла от спама, то в поисках оного наткнулся на этот интересный сервис.
Пошарив в коде, получим:

function encode(email, text, tpl) { var t = tpl.replace(/{e}/g, email); var a = t.replace(/{text}/g, text); t = ""; for (i = 0; i < a.length; i++) { if (a.charCodeAt(i) <= 127) { t += (String.fromCharCode(Math.floor(a.charCodeAt(i) / 16) + 65)) t += (String.fromCharCode(a.charCodeAt(i) % 16 + 65)); } else { t += a.charAt(i); } } var to = t; return t; } function decode(a) { var t = ""; for (i = 0; i < a.length; i++) { t += (a.charCodeAt(i) <= 127) ? String.fromCharCode((a.charCodeAt(i) - 65 ) * 16 + (a.charCodeAt(++i) - 65)) : a.charAt(i); } return t; }
* This source code was highlighted with Source Code Highlighter.

Возникает закономерный вопрос, а почему бы не реализовать нечто подобное, скажем, на php?
И вот, что получилось.

function encode_email($email, $text = null, $tpl = null)
{ if (empty($email)) return false; if ($tpl === null) $tpl = "{text}"; if ($text === null) $text = $email; $t = str_replace('{e}', $email, $tpl); $a = str_replace('{text}', $text, $t); $result = ''; for($i = 0; $i < strlen($a); $i++) { if (ord($a[$i]) <= 127) { $result .= chr(floor(ord($a[$i]) / 16) + 65) . (string)chr(ord($a[$i])%16 + 65); } else { $result .= (string)$a[$i]; } } $code = ""; $code .= "

Добавить комментарий

Ваш e-mail не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом.Узнайте как обрабатываются ваши данные комментариев.