В данном фрагменте текста страницы моего сайта я хочу продавать контекстные ссылки

Защита email от спамеров

26 октября 2010 - Администратор

Обычно электронный почтовый адрес размещается на странице следующим образом:

<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 = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;";
    return "<a href="{$mailto}{$encode}">{$text_encode}</a>";
}

Код размещения на странице:

<php echo mailto(’email@mail.ru’); ?>

Эта строка преобразуется в следующий HTML-код:

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;%65%6d%61%69%6c@%6d%61%69%6c.%72%75">
&#x65;&#x6d;&#x61;&#x69;&#x6c;&#x40;&#x6d;&#x61;&#x69;&#x6c;&#x2e;&#x72;&#x75;</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>

Источник : http://irvil.ru/zashhita-email-ot-spamerov/

Рейтинг: 0 Голосов: 0 5344 просмотра
Комментарии (0)

Нет комментариев. Ваш будет первым!

Яндекс цитирования
В случае перепечатки материалов активная ссылка на cattus.ru обязательна
© 2004-2013 cattus.ru