
Наиболее очевидным решением является использование нечитаемой машиной электронной почты в вашем HTML, например, «bob (at) bobsdomain dot com». Хотя это усложняет работу спамеров, оно также затрудняет работу ваших пользователей.
Другим вариантом является создание адреса электронной почты с использованием JavaScript, возможно, с небольшой конкатенацией строк или кодированием, например
<p>contact
<script type="text/javascript">
document.write('<a href="mai'+"lto"+"bob"+'@'+'bobsdomain.com">bob@'+"bobsdomain.com</a>");
</script>
</p>
Это остановит большинство спамеров, но любой, у кого отключен JavaScript, не увидит ваш адрес. (Я бы не рекомендовал использовать document.write.)
Лучшее решение состоит в том, чтобы использовать комбинацию методов, чтобы помешать спамерам, не вызывая трудностей пользователя. Первым шагом является использование в нашем HTML удобочитаемого, но надежного адреса электронной почты. Мы также сделаем ссылку на страницу контактов, например,
<p>Contact <a href="contact.html" class="email">bob (at) bobsdomain dot com</a></p>
Обратите внимание, что мы включили класс «email», чтобы можно было идентифицировать нашу ссылку. Следующим шагом является написание функции JavaScript, которая ищет на вашей странице запутанные электронные письма и преобразует их в настоящие ссылки «mailto:». Мы создадим файл «email.js» и включим его в наш HTML:
<script type="text/javascript" src="email.js"></script>
Требуемый код короткий, поэтому нам не нужна библиотека JavaScript:
Содержание email.js:
function EmailUnobsfuscate() {
// find all links in HTML
var link = document.getElementsByTagName && document.getElementsByTagName("a");
var email, e;
// examine all links
for (e = 0; link && e < link.length; e++) {
// does the link have use a class named "email"
if ((" "+link[e].className+" ").indexOf(" email ") >= 0) {
// get the obfuscated email address
email = link[e].firstChild.nodeValue.toLowerCase() || "";
// transform into real email address
email = email.replace(/dot/ig, ".");
email = email.replace(/(at)/ig, "@");
email = email.replace(/s/g, "");
// is email valid?
if (/^[^@]+@[a-z0-9]+([_.-]{0,1}[a-z0-9]+)*([.]{1}[a-z0-9]+)+$/.test(email)) {
// change into a real mailto link
link[e].href = "mailto:" + email;
link[e].firstChild.nodeValue = email;
}
}
}
}
Объяснение кода:
- Строка 4 выбирает каждую ссылку <a> на нашей HTML-странице, а строка 8 проходит через них.
- В строке 11 проверяется ссылка на класс «email».
- Строка 14 извлекает запутанную электронную почту из текстового содержимого узла.
- Строки с 17 по 19 преобразуют его в реальный адрес электронной почты с помощью регулярных выражений: «точка» заменяется на «.», «(В)» заменяется на «@», и все пробелы удаляются.
- Строка 22 проверяет правильность полученного адреса электронной почты.
- Строки 25 и 26 затем модифицируют узел DOM и превращают его в настоящую ссылку «mailto:».
Наконец, нам нужно убедиться, что функция запускается при загрузке страницы, добавив строку в конец email.js:
window.onload = EmailUnobsfuscate;
Результат:
- Наша оригинальная HTML-страница не содержит ссылок «mailto:» и не может быть легко взята спамерами.
- Большинство пользователей (с включенным JavaScript) увидят стандартный адрес электронной почты и ссылку «mailto:».
- Любой, кто не запускает JavaScript, увидит читаемый адрес «bob (at) bobsdomain dot com».
Цель этой статьи — показать концепцию, а не реальный код. Хотя пример работает, я предлагаю вам:
- Используйте свой собственный запутанный формат электронной почты, например, «bob {@} bobsdomain -dot- com». Спаммеры могут читать эту статью и преобразовывать закодированные электронные письма так же легко, как и вы!
- Используйте другой класс идентификатора ссылки — «электронная почта» немного очевидна!
- Используйте библиотеку JavaScript, такую как jQuery, чтобы сделать функцию короче. Вы также должны убедиться, что он справляется с пробелами или другими узлами DOM вокруг текста адреса электронной почты (не обрабатывается в приведенном выше коде).
- Замените window.onload более надежным обработчиком событий.
Удачи.