Я знаю, что мой ответ не понравится многим, но, пожалуйста, примите во внимание пункты, изложенные здесь, прежде чем пролистать.
Спаммеры легко читают все, что легко машиночитаемо. Хотя их действия кажутся нам глупыми, они не глупые люди. Они инновационные и находчивые. Они не просто используют ботов для сбора электронной почты, у них есть множество методов, и в дополнение к этому, они просто платят за хорошие свежие списки электронных писем. Это означает, что у них есть тысячи хакеров по всему миру, чтобы выполнять свою работу. Люди, готовые кодировать вредоносные программы, которые очищают экраны браузеров других людей, что в конечном итоге делает любой метод, который вы пытаетесь достичь, бесполезным. Эту тему уже прочитали более 10 таких людей, и они смеются над нами. Некоторым из них может быть даже скучно до слез, чтобы понять, что мы не можем бросить им новый вызов.
Имейте в виду, что в конечном итоге вы пытаетесь сэкономить не время, а время других. Из-за этого, пожалуйста, подумайте о том, чтобы провести здесь дополнительное время. Нет простой в исполнении магической пули, которая бы работала. Если вы работаете в компании, которая публикует на сайте 100 электронных писем, и вы можете уменьшить количество спам-сообщений в день на человека, мы говорим о 36500 спам-писем в год. Если удаление такой электронной почты занимает в среднем 5 секунд, мы говорим о 50 рабочих часах в год. Не говоря уже о сниженной сумме раздражения. Так почему бы не потратить на это несколько часов?
Не только вы и люди, которые получают электронную почту, считают время активом. Таким образом, вы должны найти способ запутать адреса электронной почты таким образом, чтобы не взломать его. Если вы используете какой-то широко используемый метод, чтобы запутать электронные письма, он действительно окупится. Так как в результате взломщик получит в свои руки тысячи, если не десятки или сотни тысяч свежих писем. И за них они получат деньги.
Итак, напишите свой собственный метод. Это редкий случай, когда изобретать велосипед действительно окупается. Используйте метод, который не машиночитаем и который предпочтительно потребует некоторого взаимодействия с пользователем, не жертвуя при этом пользовательским опытом.
Я потратил около 20 минут, чтобы кодировать пример того, что я имею в виду. В этом примере я использовал KnockoutJS просто потому, что мне это нравится, и я знаю, что вы, вероятно, не будете его использовать сами. Но это все равно не имеет значения. Это нестандартное решение, которое широко не используется. Взломать его не будет наградой за то, что он это сделал, так как метод его работы будет работать только на одной странице в огромном Интернете.
Вот скрипка: http://jsfiddle.net/hzaw6/
Код ниже не является примером хорошего кода. Но просто быстрый пример кода, который очень сложно понять машине, мы здесь работаем даже с электронной почтой. И даже если бы это могло быть сделано, оно не окупится, если его выполнить в больших масштабах.
И да, я знаю, что он не работает в IE = lte8 из-за 'Невозможно получить атрибуты свойства' с неопределенной или нулевой ссылкой ', но мне просто все равно, потому что это просто демонстрация метода, а не фактическая реализация, и не предназначена для использования на производстве, как оно есть. Не стесняйтесь писать свой код, который круче, технически более надежен и т. Д.
О, и никогда не назовите что-нибудь по почте или по электронной почте в формате html или javascript. Просто слишком легко поцарапать DOM и объект окна для чего-либо с именем mail или email и проверить, содержит ли оно что-то, совпадающее с электронной почтой. Вот почему вам не нужны переменные, которые бы содержали электронную почту в полной форме, и поэтому вы также хотите, чтобы пользователь взаимодействовал со страницей, прежде чем назначать такие переменные. Если ваша объектная модель javascript содержит какие-либо адреса электронной почты в состоянии готовности DOM, вы предоставляете их спамерам.
HTML:
<div data-bind="foreach: contacts">
<div class="contact">
<div>
<h5 data-bind="text: firstName + ' ' + lastName + ' / ' + department"></h5>
<ul>
<li>Phone: <span data-bind="text: phone"></span></li>
<li><a href="#999" data-bind="click:$root.reveal">E-mail</a> <span data-bind="visible: $root.msgMeToThis() != ''"><input class="merged" data-bind="value: mPrefix" readonly="readonly" /><span data-bind="text: '@' + domain"></span></span></li>
</ul>
</div>
</div>
</div>
JS
function ViewModel(){
var self = this;
self.contacts = ko.observableArray([
{ firstName:'John', mPrefix: 'john.doe', domain: 'domain.com', lastName: 'Doe', department: 'Sales', phone: '+358 12 345 6789' },
{ firstName:'Joe', mPrefix: 'joe.w', domain: 'wonder.com', lastName: 'Wonder', department: 'Time wasting', phone: '+358 98 765 4321' },
{ firstName:'Mike', mPrefix: 'yo', domain: 'rappin.com', lastName: 'Rophone', department: 'Audio', phone: '+358 11 222 3333' }
]);
self.msgMeToThis = ko.observable('');
self.reveal = function(m, e){
var name = e.target.attributes.href.value;
name = name.replace('#', '');
self.msgMeToThis(name);
};
}
var viewModel = new ViewModel();
ko.applyBindings(viewModel);