Я знаю, що моя відповідь багатьом не сподобається, але, будь ласка, врахуйте моменти, викладені тут, перед тим, як натиснути.
Все, що легко читається машиною, буде легко читати спамерами. Хоча їхні вчинки здаються нам дурними, вони не дурні люди. Вони інноваційні та винахідливі. Вони не просто використовують ботів для збирання електронних листів, у них є безліч методів, а крім того, вони просто платять за хороший свіжий список електронних листів. Це означає, що вони отримали тисячі хакерів з чорної шапки по всьому світу, щоб виконати свою роботу. Люди готові кодувати зловмисне програмне забезпечення, яке викреслює екрани браузерів інших людей, що в підсумку робить будь-який метод, якого ви намагаєтеся досягти марним. Цю нитку вже прочитали 10+ таких людей, і вони нас сміються. Деякі з них можуть навіть нудьгувати до сліз, дізнавшись, що ми не можемо поставити перед ними нове завдання.
Майте на увазі, що ви врешті не намагаєтесь заощадити свій час, а час інших. Через це, будь ласка, подумайте провести тут трохи зайвого часу. Немає простої у виконанні чарівної кулі, яка б спрацювала. Якщо ви працюєте в компанії, яка публікує електронні листи 100 людей на сайті, і ви можете зменшити 1 спам електронну пошту на день на людину, ми говоримо про 36500 спам-листів на рік. Якщо видалення такої електронної пошти займає в середньому 5 секунд, ми говоримо про 50 робочих годин щорічно. Не кажучи вже про зменшену кількість роздратування. Отже, чому б не витратити на це кілька годин?
Не лише ви та люди, які отримуєте електронне повідомлення, вважають час корисним. Тому ви повинні знайти спосіб придушити адреси електронної пошти таким чином, щоб не виправдати її зламати. Якщо ви використовуєте якийсь широко використовуваний метод для придушення електронних листів, він справді окупається, щоб зламати його. Оскільки в результаті, зломщик отримає тисячі, якщо не десятки чи сотні тисяч свіжих електронних листів. І за них вони отримають гроші.
Отже, продовжуйте і кодуйте свій власний метод. Це рідкісний випадок, коли винахід колеса справді окупається. Використовуйте метод, який не є читабельним для машин, і той, який бажано вимагатиме деякої взаємодії з користувачем, не приносячи шкоди користувачеві.
Я витратив десь 20 хвилин, щоб кодувати приклад того, що я маю на увазі. У прикладі я використовував KnockoutJS просто тому, що мені це подобається, і я знаю, що ви, ймовірно, самі не будете використовувати його. Але це все одно не має значення. Це нестандартне рішення, яке не використовується широко. Розтріскування не призведе до нагороди за це, оскільки метод його роботи буде працювати лише на одній сторінці у величезному Інтернеті.
Ось загадка: http://jsfiddle.net/hzaw6/
Наведений нижче код не повинен бути прикладом хорошого коду. Але лише швидкий зразок коду, який машині дуже важко зрозуміти, ми навіть обробляємо електронні листи тут. І навіть якщо це вдасться зробити, стратити його не вдасться у великих масштабах.
І так, я знаю, що він не працює на IE = lte8 через "Неможливо отримати властивості" атрибутів "невизначених або нульових посилань", але мене просто не хвилює, оскільки це лише демонстрація методу, а не реальна реалізація, і не призначений для використання у виробництві таким, яким він є. Сміливо кодуйте свій власний, який крутіший, технічно більш міцний тощо.
О, і ніколи ніколи не називайте щось поштою чи електронною поштою у html чи javascript. Це просто занадто просто скребти DOM та об’єкт вікна на що-небудь з назвою пошти чи електронної пошти та перевірити, чи містить він щось, що відповідає електронній пошті. Ось чому ви не хочете, щоб будь-які змінні ніколи містили б електронну пошту в повному вигляді, і саме тому ви хочете, щоб користувач взаємодіяв зі сторінкою, перш ніж призначити такі змінні. Якщо ваша об’єктова модель 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);