Защита email от спамеров
Обычно электронный почтовый адрес размещается на странице следующим образом:
<a href="mailto:email@mail.ru">email@mail.ru</a>
В таком виде он легко читается спам-ботами, которые сканируют сайты в поисках электронных почтовых адресов. Чтобы спам-боты не смогли занести ваш email в свою базу, его нужно скрыть. Что это значит? Это значит, что человек, посещающий ваш сайт, видит email в привычном виде, а боты, анализирующие код страницы, ничего не найдут. Существует множество способов сделать это.
Способ первый
Использовать следующую конструкцию:
<a href="" onmouseover="this.href=’ma’+’il’+’to:’+’email’+’@’+’mail.’+’ru’"> <script type="text/javascript">document.write(’email’+’@’+’mail.’+’ru’);</script> </a>
Но этот способ уже не очень эффективен, т.к. некоторые боты научились распознавать адреса, записанные в таком виде.
Способ второй
Написать php скрипт с названием, например, mailto.php, содержащий следующий код:
<?php if (isset($_GET[’username’]) && isset($_GET[’domain’])) header("Location: mailto:{$_GET[’username’]}@{$_GET[’domain’]}"); ?>
Код размещения на странице:
<a href="mailto.php?username=email&domain=mail.ru">Написать письмо</a>
Этот способ тоже уже неэффективен, т.к. некоторые боты научились анализировать заголовки.
Способ третий
Написать функцию на php, которая будет кодировать email с помощью шестнадцатеричной системы счисления.
Код:
function mailto($email) { $len = strlen($email); $encode = ’’; $text_encode = ’’; for ($x = 0; $x < $len; $x++) { if (preg_match(’!w!’, $email[$x])) $encode .= ’%’.bin2hex($email[$x]); else $encode .= $email[$x]; $text_encode .= ’&#x’.bin2hex($email[$x]).’;’; } $mailto = "mailto:"; return "<a href="{$mailto}{$encode}">{$text_encode}</a>"; }
Код размещения на странице:
<php echo mailto(’email@mail.ru’); ?>
Эта строка преобразуется в следующий HTML-код:
<a href="mailto:%65%6d%61%69%6c@%6d%61%69%6c.%72%75"> email@mail.ru</a>
Этот способ следует использовать только в случае, когда по каким-либо причинам нельзя использовать javascript на странице.
Способ четвертый
Написать функцию на php, которая будет кодировать электронный адрес и возвращать javascript код с методом String.fromCharCode() для раскодирования.
Код:
function mailto($email) { $string = "<a href="mailto:{$email}">{$email}</a>"; $len = strlen($string); $encode = array(); for($x = 0, $y = $len; $x < $y; $x++) $encode[] = ord($string[$x]); $js = "<script type="text/javascript"> "; $js .= "{document.write(String.fromCharCode("; $js .= implode(’,’, $encode); $js .= "))"; $js .= "} "; $js .= "</script> "; return $js; }
Код размещения на странице:
<php echo mailto(’email@mail.ru’); ?>
Эта строка преобразуется в следующий код:
<script type="text/javascript"> {document.write(String.fromCharCode(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,101,109,97,105,108,64,109,97,105,108,46,114,117,34,62,101,109,97,105,108,64,109,97,105,108,46,114,117,60,47,97,62))} </script>
Способ пятый
Написать функцию на php, которая будет возвращать закодированный javascript код.
Код:
function mailto($email) { $string = "document.write(’<a href="mailto:{$email}">{$email}</a>’);"; $len = strlen($string); $encode = ’’; for ($x = 0; $x < $len; $x++) $encode .= ’%’.bin2hex($string[$x]); return "<script type="text/javascript">eval(unescape(’{$encode}’))</script>"; }
Код размещения на странице:
<php echo mailto(’email@mail.ru’); ?>
Эта строка преобразуется в следующий код:
<script type="text/javascript"> eval(unescape(’%64%6f%63%75%6d%65%6e%74%2e%77%72%69%74%65%28%27%3c%61%20%68%72%65%66%3d%22%6d%61%69%6c%74%6f%3a%65%6d%61%69%6c%40%6d%61%69%6c%2e%72%75%22%3e%65%6d%61%69%6c%40%6d%61%69%6c%2e%72%75%3c%2f%61%3e%27%29%3b’)) </script>
Этот способ предпочтительней, чем предыдущий.
Способ шестой
Выводить почтовый адрес с помощью ajax. Я покажу на примере jQuery, как этот сделать.
Создать html файл email.html со следующим кодом:
<a href="mailto:email@mail.ru">email@mail.ru</a>
На странице, на которой нужно вывести электронный почтовый адрес, добавить следующий код:
<head> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> jQuery(document).ready ( function($) { $(’#email’).load("email.html"); } ); </script> </head> <body> ... ... <div id="email"></div> ... ... </body>
Код страницы не будет содержать email, но пользователи будут его видеть.
Способ седьмой
Этот способ представляет собой комбинацию пятого и шестого способов.
Нужно создать php файл email.php со следующим кодом:
<?php function mailto($email) { $string = "document.write(’<a href="mailto:{$email}">{$email}</a>’);"; $len = strlen($string); $encode = ’’; for ($x = 0; $x < $len; $x++) $encode .= ’%’.bin2hex($string[$x]); return "<script type="text/javascript">eval(unescape(’{$encode}’))</script>"; } echo mailto("email@mail.ru"); ?>
На странице, на которой нужно вывести электронный почтовый адрес, добавить следующий код:
<head> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript"> jQuery(document).ready ( function($) { $(’#email’).load("email.php"); } ); </script> </head> <body> ... ... <div id="email"></div> ... ... </body>
Нет комментариев. Ваш будет первым!