Tôi biết câu trả lời của tôi sẽ không được nhiều người thích nhưng xin vui lòng xem xét các điểm được nêu ở đây trước khi đưa ngón tay cái xuống.
Bất cứ thứ gì dễ dàng máy có thể đọc được sẽ dễ dàng được đọc bởi những kẻ gửi thư rác. Mặc dù hành động của họ có vẻ ngu ngốc đối với chúng tôi, họ không phải là những người ngu ngốc. Họ sáng tạo và tháo vát. Họ không chỉ sử dụng bot để thu hoạch e-mail, họ có rất nhiều phương pháp theo ý của họ và ngoài ra, họ chỉ cần trả tiền cho danh sách email mới. Điều đó có nghĩa là, họ đã có hàng ngàn tin tặc mũ đen trên toàn thế giới để thực hiện công việc của họ. Mọi người sẵn sàng mã hóa phần mềm độc hại quét màn hình của các trình duyệt của người khác mà cuối cùng sẽ hiển thị bất kỳ phương pháp nào bạn đang cố gắng để đạt được vô dụng. Chủ đề này đã được hơn 10 người như vậy đọc và họ đang cười nhạo chúng tôi. Một số trong số họ thậm chí có thể chán đến phát khóc khi phát hiện ra chúng ta không thể đưa ra một thử thách mới cho họ.
Hãy nhớ rằng cuối cùng bạn không cố gắng tiết kiệm thời gian của mình mà là thời gian của người khác. Vì điều này, xin vui lòng xem xét dành một số thời gian thêm ở đây. Không có viên đạn ma thuật dễ thực hiện nào có thể hoạt động. Nếu bạn làm việc trong một công ty xuất bản 100 email của mọi người trên trang web và bạn có thể giảm 1 email spam mỗi ngày cho mỗi người, chúng ta sẽ nói về 36500 email spam mỗi năm. Nếu xóa email như vậy trung bình mất 5 giây, chúng ta sẽ nói về 50 giờ làm việc hàng năm. Chưa kể số lượng giảm phiền toái. Vì vậy, tại sao không dành một vài giờ cho việc này?
Không chỉ bạn và những người nhận e-mail coi thời gian là tài sản. Do đó, bạn phải tìm cách làm xáo trộn các địa chỉ e-mail theo cách đó để không phải trả tiền để bẻ khóa. Nếu bạn sử dụng một số phương pháp được sử dụng rộng rãi để làm xáo trộn các e-mail, nó thực sự có ích để bẻ khóa nó. Vì kết quả là, cracker sẽ có được hàng ngàn, nếu không phải là hàng chục hoặc hàng trăm ngàn e-mail mới. Và đối với họ, họ sẽ nhận được tiền.
Vì vậy, hãy tiếp tục và mã hóa phương pháp của riêng bạn. Đây là một trường hợp hiếm hoi khi phát minh lại bánh xe thực sự được đền đáp. Sử dụng một phương pháp không thể đọc được bằng máy và tốt nhất là sẽ yêu cầu một số tương tác người dùng mà không làm mất trải nghiệm người dùng.
Tôi đã dành khoảng 20 phút để viết ra một ví dụ về ý tôi muốn nói. Trong ví dụ này, tôi đã sử dụng KnockoutJS đơn giản vì tôi thích nó và tôi biết bạn có thể sẽ không sử dụng nó cho mình. Nhưng dù sao nó cũng không liên quan. Đó là một giải pháp tùy chỉnh không được sử dụng rộng rãi. Bẻ khóa nó sẽ không tạo ra phần thưởng cho việc thực hiện vì phương pháp thực hiện nó sẽ chỉ hoạt động trên một trang duy nhất trên internet rộng lớn.
Đây là câu đố: http://jsfiddle.net/hzaw6/
Mã dưới đây không có nghĩa là một ví dụ về mã tốt. Nhưng chỉ là một mẫu mã nhanh mà rất khó để máy phát hiện ra chúng tôi thậm chí còn xử lý các e-mail ở đây. Và ngay cả khi nó có thể được thực hiện, nó sẽ không được đền đáp để thực hiện ở quy mô lớn.
Và vâng, tôi biết nó không hoạt động trên IE = lte8 vì 'Không thể lấy thuộc tính' thuộc tính 'của tham chiếu không xác định hoặc null' nhưng tôi chỉ đơn giản là không quan tâm vì đó chỉ là bản demo của phương thức, không phải là triển khai thực tế, và không có ý định được sử dụng trong sản xuất. Hãy thoải mái viết mã của riêng bạn, nó mát hơn, kỹ thuật vững chắc hơn, vv ..
Ồ, và không bao giờ đặt tên một cái gì đó thư hoặc email trong html hoặc javascript. Thật quá dễ dàng để cạo DOM và đối tượng cửa sổ cho bất kỳ thứ gì có tên là thư hoặc email và kiểm tra xem nó có chứa thứ gì đó phù hợp với e-mail không. Đây là lý do tại sao bạn không muốn bất kỳ biến nào có thể chứa e-mail ở dạng đầy đủ và đây cũng là lý do bạn muốn người dùng tương tác với trang trước khi bạn gán các biến đó. Nếu mô hình đối tượng javascript của bạn chứa bất kỳ địa chỉ email nào ở trạng thái sẵn sàng DOM, thì bạn đang phơi bày chúng cho những kẻ gửi thư rác.
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>
Mã thông báo
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);