Я знаю, что мой ответ не понравится многим, но, пожалуйста, примите во внимание пункты, изложенные здесь, прежде чем переходить к обсуждению
Все, что легко читается машиной, будет легко читаться машиной спамерами. Хотя их действия кажутся нам глупыми, они не глупые люди. Они инновационные и находчивые. Они не просто используют ботов для сбора электронной почты, у них есть множество методов, и в дополнение к этому, они просто платят за хорошие свежие списки электронных писем. Это означает, что они получили тысячи хакеров по всему миру для выполнения своей работы. Люди, готовые кодировать вредоносные программы, которые очищают экраны браузеров других людей, что в конечном итоге делает любой метод, который вы пытаетесь достичь, бесполезным. Эту ветку уже прочитали более 10 таких людей, и они смеются над нами. Некоторым из них может быть даже скучно до слез, чтобы понять, что мы не можем бросить им новый вызов.
Имейте в виду, что в конечном итоге вы пытаетесь сэкономить не время, а время других. Из-за этого, пожалуйста, подумайте о том, чтобы провести здесь дополнительное время. Нет простой в исполнении волшебной пули, которая бы работала. Если вы работаете в компании, которая публикует на сайте 100 электронных писем, и вы можете уменьшить количество спам-сообщений в день на человека, мы говорим о 36500 спам-писем в год. Если удаление такой электронной почты занимает в среднем 5 секунд, мы говорим о 50 рабочих часах в год. Не говоря уже о сниженной сумме раздражения. Итак, почему бы не потратить несколько часов на это?
Не только вы и люди, которые получают электронную почту, считают время активом. Следовательно, вы должны найти способ запутать адреса электронной почты таким образом, чтобы не взломать его. Если вы используете какой-то широко используемый метод, чтобы запутать электронные письма, он действительно окупится. Так как в результате взломщик получит в свои руки тысячи, если не десятки или сотни тысяч свежих писем. И за них они получат деньги.
Итак, продолжайте и закодируйте свой собственный метод. Это редкий случай, когда изобретать велосипед действительно окупается. Используйте метод, который не является машиночитаемым и который предпочтительно потребует некоторого взаимодействия с пользователем, не жертвуя при этом пользовательским опытом.
Я потратил около 20 минут, чтобы кодировать пример того, что я имею в виду. В этом примере я использовал KnockoutJS просто потому, что он мне нравится, и я знаю, что вы, вероятно, не будете его использовать сами. Но это все равно не имеет значения. Это нестандартное решение, которое широко не используется. Взломать его не будет вознаграждением за это, так как метод его работы будет работать только на одной странице в огромном Интернете.
Вот скрипка: http://jsfiddle.net/hzaw6/
Приведенный ниже код не является примером хорошего кода. Но просто быстрый пример кода, который очень сложно понять машине, мы здесь работаем даже с электронной почтой. И даже если бы это могло быть сделано, это не окупится, чтобы выполнить в больших масштабах.
И да, я знаю, что это не работает в IE = lte8 из-за «Невозможно получить атрибуты свойства» с неопределенной или нулевой ссылкой », но мне просто все равно, потому что это просто демонстрация метода, а не фактическая реализация, и не предназначен для использования на производстве как есть. Не стесняйтесь писать свой код, который круче, технически более надежен и т. Д.
О, и никогда не назови что-нибудь mail или email в 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);