?

Log in

DMakeev

dmakeev in webdistortion

Как защитить e-mail от спам-ботов

Задача: защитить от спам-ботов e-mail на сайте.


Условия: мест где может быть мыльник вагон, поэтому хочется более-менее универсального решения.
Метод защиты: при генерации страницы все адреса электронной почты конвертируются в "обычные" ссылки, которые при отображении страницы у клиента яваскриптом возвращаются к исходному виду.




Итак, решение:
PHP - тут все просто — вылавливаем адреса и приводим в божеский вид. После генерации всей страницы, естественно:

$output = preg_replace('!(mailto:)?([a-z0-9\.\-]+)@([a-z0-9\.\-]+)\.([a-z]{2,6})!si', '/$2.m.$3/$4/', $output);



Яваскриптовая часть в трех вариантах — каждый волен выбирать понравившийся:
Don`t fuck my brain:

  window.addEvent('load', function() {
    var regEmail = /\/([a-zA-Z0-9\-\.]+)\.m\.([a-zA-Z0-9\-\.]+)\/([a-zA-Z]{2,6})\//g;
    $document.body.innerHTML = document.body.innerHTML.replace(regEmail, '$1@$2.$3');
  });



pure JS:

  window.addEvent('load', function() {
      var regEmail = /\/([a-zA-Z0-9\-\.]+)\.m\.([a-zA-Z0-9\-\.]+)\/([a-zA-Z]{2,6})\//g;
      var list = document.getElementsByTagName('a');
      for(var i=0; i      if(list[i].href.match(regEmail)) {
        var str = list[i].href.replace(document.location.protocol + '//' + document.location.hostname, '');
        str = str.replace(regEmail, '$1@$2.$3');
        list[i].href = 'mailto:' + str;
        list[i].innerHTML = el.innerHTML.replace(regEmail, '$1@$2.$3');
      }
    }
    if(document.body.innerHTML.match(regEmail)) {
      $document.body.innerHTML = document.body.innerHTML.replace(regEmail, '$1@$2.$3');
    }
  });




Mootools:

  window.addEvent('domready', function() {
    var regEmail = /\/([a-zA-Z0-9\-\.]+)\.m\.([a-zA-Z0-9\-\.]+)\/([a-zA-Z]{2,6})\//g;
    $$('a').each(function(el) {
      if(el.href.match(regEmail)) {
        var str = el.href.replace(document.location.protocol + '//' + document.location.hostname, '');
        str = str.replace(regEmail, '$1@$2.$3');
        el.href = 'mailto:' + str;
        el.innerHTML = el.innerHTML.replace(regEmail, '$1@$2.$3');
      }
    });
    if(document.body.innerHTML.match(regEmail)) {
      $document.body.innerHTML = document.body.innerHTML.replace(regEmail, '$1@$2.$3');
    }
  });

Tags:

Comments