私の答えが多くの人に気に入られないことはわかっていますが、否定する前に、ここで概説されている点を考慮してください.
機械で簡単に読み取れるものは、スパマーが簡単に機械で読み取ることができます。彼らの行動は私たちにはばかげているように見えますが、彼らは愚かな人ではありません。彼らは革新的で機知に富んでいます。彼らはボットを使用して電子メールを収集するだけでなく、自由に使用できる方法がたくさんあり、それに加えて、新鮮な電子メールのリストにお金を払っているだけです。つまり、彼らは世界中に何千人ものブラックハット ハッカーを雇い、彼らの仕事を遂行させたということです。他の人のブラウザの画面をスクレイピングするマルウェアをコーディングする準備ができている人は、最終的にはあなたが達成しようとしている方法を役に立たなくします. このスレッドはすでに 10 人以上に読まれており、彼らは私たちを笑っています。彼らの何人かは、私たちが彼らに新しい挑戦をすることができないことを知って、涙を流すことさえあるかもしれません.
最終的には自分の時間を節約しようとしているのではなく、他の人の時間を節約しようとしていることを覚えておいてください. このため、ここで余分な時間を費やすことを検討してください。簡単に実行できる魔法の弾丸はありません。サイトで 100 人の電子メールを公開している会社で働いていて、1 人あたり 1 日あたり 1 通のスパム メールを減らすことができる場合、年間 36500 通のスパム メールについて話していることになります。そのような電子メールを削除するのに平均で 5 秒かかるとすると、年間 50 時間の作業時間になります。煩わしさの軽減は言うまでもありません。では、これに数時間を費やしてみませんか?
時間を資産と考えるのは、あなたと電子メールを受信する人々だけではありません。したがって、電子メール アドレスを難読化する方法を見つけて、クラックしても報われないようにする必要があります。電子メールを難読化するために広く使用されている方法を使用する場合、それを解読することは本当に報われます。その結果、クラッカーは、数万または数十万ではないにしても、数千の新しい電子メールを手に入れることになるからです。そして彼らのために、彼らはお金を得るでしょう。
それでは、独自のメソッドをコーディングしてください。これは、車輪の再発明が本当に報われるまれなケースです。機械可読ではなく、できればユーザー エクスペリエンスを犠牲にすることなく、ある程度のユーザー操作が必要な方法を使用してください。
私が言いたいことの例をコード化するのに約 20 分を費やしました。この例では、私が KnockoutJS を使用したのは、私が気に入ったからであり、おそらくあなた自身は使用しないだろうとわかっているからです。でもやっぱり関係ない。これは、広く使用されていないカスタム ソリューションです。それをクラックしても、それを行うことに対する報酬はありません。それを行う方法は、広大なインターネットの単一のページでしか機能しないからです.
これがフィドルです:http://jsfiddle.net/hzaw6/
以下のコードは、適切なコードの例ではありません。しかし、機械が理解するのが非常に難しいコードの簡単なサンプルにすぎません。ここで電子メールを処理することさえできます。たとえそれができたとしても、大規模に実行することは報われません。
はい、「未定義または null 参照のプロパティ「属性」を取得できない」ため、IE = lte8 では機能しないことはわかっていますが、実際の実装ではなくメソッドの単なるデモであるため、気にしません。そのまま本番環境で使用することは意図されていません。よりクールで、技術的により堅牢な独自のコードを自由にコーディングしてください.
ああ、html や javascript でメールやメールに名前を付けることは決してありません。DOM と window オブジェクトをスクレイピングして、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);