• php

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

    Предлагаю на обсуждение написанный мною класс для защиты публикуемого на странице email от его похищения спамерами. Идея, конечно, не нова, но зато реализация… :)

    Итак:

    class Email {
      function obfuscate($email) { 
        $i=0; 
        $obfuscated=""; 
        while ($i<strlen($email)) { 
          if (rand(0,2)) { 
            $obfuscated.='%25'.dechex(ord($email{$i})); 
          } else { 
            $obfuscated.=$email{$i}; 
          } 
          $i++; 
        } 
        return $obfuscated; 
      } 
      function obfuscate_numeric($plaintext) { 
        $i=0; 
        $obfuscated=""; 
        while ($i<strlen($plaintext)) { 
          if (rand(0,2)) { 
            $obfuscated.='&#'.ord($plaintext{$i}); 
          } else { 
            $obfuscated.=$plaintext{$i}; 
          } 
          $i++; 
        } 
        return $obfuscated; 
      } 
      function generateProtection($email,$label) { 
        return sprintf("<a href='%25s:%25s'>%25s</a>", 
        $this->obfuscate_numeric('mailto'), 
        $this->obfuscate($email), 
        $this->obfuscate_numeric($label)); 
      }
    }
    $e = new Email();
    $email = $e->generateProtection("vasya@pupkin.ru", "vasya@pupkin.ru");
    
    Опубликовано: Категория: phpКомментарии: 11

    Комментарии (оставить комментарий)

    Комментарий
    Геннадий

    Проверил, вроде работает!!!
    Круто!
    Браво, Лукич!!!

    Ответить

    19.04.2006

    Комментарий
    Wolf

    Забыли закрывающий тэг "" :)
    Скрипт классыный.
    А как результат его работы сделать валидным? Закрыть в JavaScript и CDATA?

    Ответить

    23.04.2006

    Комментарий
    Лукин Леонид

    Просто закрывающий тег пропал при публикации кода в блоге. Теперь я его восстановил. А почему Вы считаете, что получится невалидная ссылка?

    Ответить

    23.04.2006

    Комментарий
    Wolf

    Проверил ссылку валидатором на странице XHTML 1.0:
    http://validator.w3.org/check?uri=http%253A%252F%252Fwww.wolf-ware.ru%252Fworks%252Fvladski%252F
    Валидатор ругается.
    PS. Я неверно выразился: ссылка валидна, но есть предупреждения.

    23.04.2006

    Комментарий
    Алексей Фёдоров

    Получаются конструкции типа "k" без ; в конце, что неверно с точки зрения html. А в целом код полезный. Спасибо. 8)

    Да и вообще блог интересный... набрёл случайно, полистал часок-другой, почерпнул несколько новых полезных мыслей/идей.

    Ответить

    08.03.2007

    Комментарий
    sd2k

    супер

    Ответить

    19.09.2007

    Комментарий
    stur

    код работает неправильно.
    пробовал кодировать методами класса icq, skype или номер телефона и нашол ошибку.
    если email содержит цифры например 123456@gmail.com
    то может возникнуть ситуация когда одно число будет закодированно следуйщее пропущенно и получется из строки 123456 = ጻ456
    1 кодируется в 1
    затем идет 2 пропуска тоесть символы 2 и 3 остаются без изменений
    в результате они склеиваются броузером в один новый символ ጻ
    как он выглядит в броузере - как треугольничек.
    идея неплохая но надо доробатывать, и унифицировать чтоб можно было кодировать все - телефон, icq, msn, skype .... чуствую самому придется доделывать

    Ответить

    27.04.2008

    Комментарий
    Леонид

    Если доделаете - буду раз, если поделитесь с нами результатами...

    Ответить

    28.04.2008

    Комментарий
    stur

    да там и доделывать то нечего всегото точку с запятой поставить $obfuscated.='&#'.ord($plaintext{$i}).';';
    тогда получаем из 123456 = 123456
    все читается правильно и валидатор не ругается

    Ответить

    30.04.2008

    Комментарий
    HOK

    А куда нужно вставлять этот код???

    Ответить

    24.08.2009

    Комментарий
    Сергей

    Этот код защиты от спамеров надо ставить вместо email в php-документы. Естественно там, где php-код будет отработан.

    Ответить

    25.08.2009

    Оставьте свой комментарий

    Ваше имя: Email: Оставьте свой email, если хотите получать уведомления о комментариях на этой странице. Ваш email не будет опубликован на сайте.