Эффективный способ скрыть электронную почту от спам-ботов - PullRequest
176 голосов
/ 27 января 2009

На своей домашней странице я использую этот метод, чтобы скрыть свою электронную почту от спам-ботов:

<a href="admin [at] example.com"
   rel="nofollow"
   onclick="this.href='mailto:' + 'admin' + '@' + 'example.com'">Contact me</a>

Что вы думаете об этом? Это эффективно? Какие еще методы вы знаете или используете?

Ответы [ 32 ]

7 голосов
/ 03 августа 2010

Один из моих любимых методов - скрыть адрес электронной почты с помощью php, классический пример - преобразовать символы в значения HEX следующим образом:

function myobfiscate($emailaddress){
 $email= $emailaddress;                
 $length = strlen($email);                         
 for ($i = 0; $i < $length; $i++){                
 $obfuscatedEmail .= "&#" . ord($email[$i]).";";
 }
 echo $obfuscatedEmail;
}

И тогда в моей разметке я просто назову это следующим образом:

<a href="mailto:<?php echo myobfiscate('someone@somewhere.com')" title="Email me!"><?php echo myobfiscate('someone@somewhere.com');</a>

Тогда изучите свой источник, вы будете приятно удивлены!

5 голосов
/ 03 мая 2017

Спам-боты не будут это интерпретировать, потому что это менее известный метод:)

Сначала определите css:

email:before {
    content: "admin";
}

email:after {
    content: "@example.com";
}

Теперь, где бы вы ни хотели отобразить свою электронную почту, просто вставьте следующий HTML:

<div id="email"></div>

И тада!

4 голосов
/ 27 мая 2015

Я использую очень простую комбинацию CSS и jQuery, которая корректно отображает адрес электронной почты для пользователя, а также работает при нажатии или наведении на якорь:

HTML:

<a href="mailto:me@example.spam" id="lnkMail">moc.elpmaxe@em</a>

CSS:

#lnkMail {
    unicode-bidi: bidi-override;
    direction: rtl;
}

JQuery:

$('#lnkMail').hover(function(){
    // here you can use whatever replace you want
    var newHref = $(this).attr('href').replace('spam', 'com');
    $(this).attr('href', newHref);
});

Здесь - рабочий пример.

3 голосов
/ 27 января 2009

Одним из простых решений является использование HTML-сущностей вместо реальных символов. Например, «me@example.com» будет преобразован в:

<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;&#109;&#101;&#64;&#101;&#120;&#97;&#109;&#112;&#108;&#101;&#46;&#99;&#111;&#109;">email me</A>
3 голосов
/ 03 января 2013

! - Добавляя это для справки, не знаю, насколько устаревшей может быть информация, но она рассказывает о нескольких простых решениях, которые не требуют использования каких-либо сценариев

После поиска этого я сам наткнулся на эту страницу, но также на эти страницы:

http://nadeausoftware.com/articles/2007/05/stop_spammer_email_harvesters_obfuscating_email_addresses

попробуйте изменить адрес электронной почты

Пример простого HTML:

<bdo dir="rtl">moc.elpmaxe@nosrep</bdo>
Result : person@example.com

Тот же эффект с использованием CSS

CSS:
.reverse { unicode-bidi:bidi-override; direction:rtl; }
HTML:
<span class="reverse">moc.elpmaxe@nosrep</span>
Result : person@example.com

Сочетание этого с любым из ранее упомянутых методов может даже сделать его более эффективным

3 голосов
/ 12 мая 2016

Вот моя рабочая версия:


Создать где-нибудь контейнер с резервным текстом:

<div id="knock_knock">Activate JavaScript, please.</div>

И добавить в нижней части DOM (w.r.t. рендеринга) следующий фрагмент:

<script>
  (function(d,id,lhs,rhs){
    d.getElementById(id).innerHTML = "<a rel=\"nofollow\" href=\"mailto"+":"+lhs+"@"+rhs+"\">"+"Mail"+"<\/a>";
  })(window.document, "knock_knock", "your.name", "example.com");
</script>

Добавляет сгенерированную гиперссылку в указанный контейнер:

<div id="knock_knock"><a rel="nofollow" href="your.name@example.com">Mail</a></div>

Кроме того, вот сокращенная версия:

<script>(function(d,i,l,r){d.getElementById(i).innerHTML="<a rel=\"nofollow\" href=\"mailto"+":"+l+"@"+r+"\">"+"Mail"+"<\/a>";})(window.document,"knock_knock","your.name","example.com");</script>
2 голосов
/ 27 января 2009

Вероятно, есть боты, которые распознают [at] и другие маскировки как символ @. Так что это не очень эффективный метод.

Конечно, вы можете использовать некоторые кодировки, такие как URL-кодирование или ссылки на символы HTML (или оба):

// PHP example
// encodes every character using URL encoding (%hh)
function foo($str) {
    $retVal = '';
    $length = strlen($str);
    for ($i=0; $i<$length; $i++) $retVal.=sprintf('%%%X', ord($str[$i]));
    return $retVal;
}
// encodes every character into HTML character references (&#xhh;)
function bar($str) {
    $retVal = '';
    $length = strlen($str);
    for ($i=0; $i<$length; $i++) $retVal.=sprintf('&#x%X;', ord($str[$i]));
    return $retVal;
}

$email = 'user@example.com';
echo '<a href="'.bar('mailto:?to=' . foo(','.$email.'')).'">mail me</a>';

// output
// <a href="&#x6D;&#x61;&#x69;&#x6C;&#x74;&#x6F;&#x3A;&#x3F;&#x74;&#x6F;&#x3D;&#x25;&#x32;&#x43;&#x25;&#x37;&#x35;&#x25;&#x37;&#x33;&#x25;&#x36;&#x35;&#x25;&#x37;&#x32;&#x25;&#x34;&#x30;&#x25;&#x36;&#x35;&#x25;&#x37;&#x38;&#x25;&#x36;&#x31;&#x25;&#x36;&#x44;&#x25;&#x37;&#x30;&#x25;&#x36;&#x43;&#x25;&#x36;&#x35;&#x25;&#x32;&#x45;&#x25;&#x36;&#x33;&#x25;&#x36;&#x46;&#x25;&#x36;&#x44;">mail me</a>

Но поскольку их использование разрешено законом, каждый браузер / почтовый клиент должен также обрабатывать эти кодировки.

2 голосов
/ 27 января 2009

Лучший способ скрыть адреса электронной почты хорош, пока бот-программист не обнаружит эту «кодировку» и не реализует алгоритм дешифрования.

Опция JavaScript не будет работать долго, потому что есть много сканеров, интерпретирующих JavaScript.

Там нет ответа, имхо.

2 голосов
/ 06 января 2011

Я фанат SpamSpan - он запутывается, но все же расшифровывается, если JS отключен. Кажется, он тоже работает, хотя я использую его только около года на сайте с низким трафиком.

Существует также модуль для Drupal, который автоматически превращает электронные письма в SpamSpans, если вам это нужно.

1 голос
/ 02 декабря 2015

Мне не нравится смешивать JavaScript и HTML, поэтому я использую это решение. У меня пока работает нормально.

Идея : вы можете усложнить задачу, предоставив зашифрованную информацию в атрибутах data и расшифровав ее в JS. Это просто сделать, заменив буквы или просто поменяв их местами.

HTML :

<span class="generate-email" data-part1="john" data-part2="gmail" data-part3="com">placeholder</span>

JS

$(function() {
    $('.generate-email').each(function() {
        var that = $(this);
        that.html(
            that.data('part1') + '@' + that.data('part2') + '.' + that.data('part3')
        );
    });  
});

Попробуйте: http://jsfiddle.net/x6g9L817/

...