Wiem, że moja odpowiedź nie spodoba się wielu, ale proszę przejrzeć punkty przedstawione tutaj przed kciukiem w dół.
Wszystko, co można łatwo odczytać maszynowo, będzie łatwe do odczytania przez spamerów. Choć ich działania wydają nam się głupie, nie są to głupi ludzie. Są innowacyjni i zaradni. Nie tylko używają botów do zbierania wiadomości e-mail, mają do dyspozycji mnóstwo metod, a ponadto po prostu płacą za dobre, świeże listy wiadomości e-mail. Oznacza to, że mają tysiące hakerów na całym świecie, którzy wykonują swoje zadania. Ludzie gotowi do kodowania złośliwego oprogramowania, które zeskrobują ekrany przeglądarek innych ludzi, co ostatecznie czyni każdą metodę, którą próbujesz osiągnąć, bezużyteczną. Ten wątek został już przeczytany przez ponad 10 takich osób i śmieją się z nas. Niektóre z nich mogą być nawet znudzone łzami, aby dowiedzieć się, że nie możemy postawić im nowego wyzwania.
Pamiętaj, że ostatecznie nie próbujesz oszczędzać czasu, ale czasu innych. Z tego powodu rozważ rozważenie spędzenia tutaj dodatkowego czasu. Nie ma łatwej do wykonania magicznej kuli, która by działała. Jeśli pracujesz w firmie, która publikuje na stronie 100 e-maili i możesz zmniejszyć 1 spam dziennie na osobę, mówimy o 36500 e-mailach spamowych rocznie. Jeśli usunięcie takiej wiadomości e-mail zajmuje średnio 5 sekund, mówimy o 50 godzinach pracy rocznie. Nie wspominając o zmniejszonej irytacji. Dlaczego więc nie poświęcić na to kilku godzin?
Nie tylko ty i ludzie, którzy otrzymują e-mail, uważają czas za atut. Dlatego musisz znaleźć sposób na zaciemnienie adresów e-mail w taki sposób, aby się nie opłaciło. Jeśli używasz jakiejś powszechnie stosowanej metody do zaciemniania wiadomości e-mail, naprawdę warto je złamać. Ponieważ w rezultacie cracker dostanie tysiące, jeśli nie dziesiątki lub setki tysięcy świeżych wiadomości e-mail. I dla nich dostaną pieniądze.
Więc naprzód i napisz własną metodę. Jest to rzadki przypadek, w którym wynalezienie koła naprawdę się opłaca. Użyj metody, której nie można odczytać maszynowo i która będzie wymagała pewnej interakcji użytkownika bez poświęcania wygody użytkownika.
Spędziłem około 20 minut, żeby zakodować przykład tego, co mam na myśli. W tym przykładzie użyłem KnockoutJS tylko dlatego, że mi się podoba i wiem, że prawdopodobnie sam go nie użyjesz. Ale to i tak nie ma znaczenia. To niestandardowe rozwiązanie, które nie jest powszechnie stosowane. Złamanie go nie będzie nagrodą za zrobienie tego, ponieważ metoda zrobienia tego działałaby tylko na jednej stronie w rozległym Internecie.
Oto skrzypce: http://jsfiddle.net/hzaw6/
Poniższy kod nie jest przykładem dobrego kodu. Ale tylko krótka próbka kodu, który jest bardzo trudny do zrozumienia przez maszynę, obsługuje nawet e-maile. I nawet jeśli da się to zrobić, to nie opłaca się wykonywać na dużą skalę.
I tak, wiem, że to nie działa na IE = lte8 z powodu „Nie można uzyskać atrybutów właściwości” niezdefiniowanego lub zerowego odwołania ”, ale po prostu mnie to nie obchodzi, ponieważ jest to tylko demonstracja metody, a nie faktyczna implementacja, i nie jest przeznaczony do wykorzystania w produkcji w obecnej postaci. Możesz napisać własny kod, który jest fajniejszy, technicznie bardziej solidny itp.
Aha, i nigdy nie wymieniaj żadnych wiadomości e-mail ani html ani javascript. Zbyt łatwo jest zeskrobać DOM i obiekt okna dla dowolnej nazwy o nazwie poczta lub e-mail i sprawdzić, czy zawiera coś, co pasuje do wiadomości e-mail. Dlatego nie chcesz, aby zmienne, które zawierałyby e-mail w pełnej formie, nie były nigdy potrzebne, dlatego też chcesz, aby użytkownik wchodził w interakcję ze stroną przed przypisaniem takich zmiennych. Jeśli Twój obiektowy model javascript zawiera adresy e-mail w stanie gotowości DOM, udostępniasz je spamerom.
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);