几种使网页中的邮件地址更安全的方法

现在 spammer 们很猖狂,因此直接把邮件地址写在网页中似乎不是一个好主意。如何公布你的邮件地址才能既安全又有效?下面分享几种方法,使得邮件地址更难被别有用心的人收集到。

使用 AT 和 DOT

这应该是最古老,也最方便的办法了:

Contact: john.appleseed <AT> gmail <DOT> com

但是它往往还比较有效,因为这种方法形式复杂多变,spammer 们往往难以检测出来。只是…个人认为比较难看。

使用图片代替

这种方式不必多说,有效,但是缺点也很明显:增加了数据载入量、不易复制,有时不美观,等等。 有很多做这种图的网站。如果你用 Gmail,则可以选择Email Icon Generator,因为它有一些预定义的模版,生成的图比较好看。例如:

Gmail

当然,它也支持自定义:

Custom

使用 JavaScript

<p>Contact: <span id="hidden-email"></span></p>
<script>
var a = "john.appleseed" + String.fromCharCode(64) + "gm" + "ail.com";
document.getElementById("hidden-email").innerHTML = a;
</script>

这种方式代码中根本不会出现@字符,而且也可以直接复制,并且只要启用了 JavaScript 的浏览器都可以正常显示。只不过对于同样启用 JavaScript 的爬虫就无效了。查看 Demo

使用 CSS

使用 display:none

这个方法即在地址中插入一些隐藏的文本,存在于 DOM 中,但是人眼看不到。例如:

<p>Contact: john.apple<span class="hidden">stop spam</span>seed@gmail.com</p>
<style>
.hidden {
    display: none;
}
</style>

使用 CSS 反转阅读顺序

即,用从右向左的方式书写你的 Email 地址,然后再用 CSS 把它反过来。这样,在代码中实际出现的 Email 地址就是相反的。如下:

<p class="reversed">moc.liamg@deeselppa.nhoj</p>
<style>
.reversed {
    unicode-bidi: bidi-override;
    direction: rtl;
}
</style>

但是这样做有一个明显缺点,就是…用户复制出来的内容也是反着的。

备注,通过专用的 HTML 标签也可以做到这个效果,不用自己写 CSS 代码。方法:

<bdo dir="rtl">moc.liamg@deeselppa.nhoj</bdo>

使用 CSS 伪元素 :before 和 :after

<p>Contact: <span id="hidden-email">john.appleseed</span></p>
<style>
#hidden-email:after {
    content: "@gmail.com";
}
</style>

使用这种方式,在 DOM 中根本不会出现完整的邮件地址,看到的仅仅是一种「视觉效果」。但是缺点是,用户无法复制隐藏起来的部分。查看 Demo

注意:如果使用 CSS3 双冒号的写法::before::after,则 IE 8 及以下的浏览器是不支持的。

其他方法

使用 Google reCAPTCHA Mailhide

这是 Google 提供的一项免费服务,用户需要输入一个验证码才能查看邮件地址,因此除了麻烦一些,是非常有效的。点击前往

使用一个「联系我」表单

如果支持动态页面,则可以使用一个联系表单,用户提交表单之后通过服务器端语言来发送邮件到你的邮箱。使用这种方法绝对不会在网页中暴露邮件地址,并且还可以添加验证码等机制进行验证,甚至提供上传附件等功能。

本文作者为,最后修订于

讨论