您确实有多种方法,您当然应该考虑到此类获取此内容的机器人本质上是抓取它们遇到的任何页面并搜索看起来像电子邮件地址的模式。正如你所说,这有点像军备竞赛,没有什么能阻止开发此类刮板的人们实施这些方法(等等,这就是你问的原因吗?)
在大多数情况下,您将希望避免从您的电子邮件地址实际创建超链接,并且您当然希望避免使用 mailto: - 这基本上是在向任何阅读页面的人宣布“嘿,我是一个电子邮件地址”。
让我们从漂亮而简单的间距开始:
m y e m a i l @ m y d o m a i n . c o m
这显然是一个人类的电子邮件地址,看起来像是一堆随机字母,带有空格的刮板。不喜欢间距?不太常见但更万无一失的是将您的电子邮件地址转换为图像。它仍然是人类可读的,但它不会是大多数电子邮件抓取工具正在寻找的东西,更不用说能够解析了。
将您的标点符号(@ 和句点)转换成它们的 HTML 等价物(@和.分别)怎么样?
myemail@mydomain.com
当由浏览器呈现时,这仍然看起来像一个电子邮件地址,但从抓取的角度来看,它不会那么难解决,因为您只需寻找.and @- 但为什么要停在那里?为什么不一路走,只对整个电子邮件地址进行编码?这可以使用Rumkin 的 Mailto Encoder 之类的工具轻松完成,突然间您的电子邮件地址如下所示:
myema%69l@my%64%6fma%69n%2e%63om
这仍然像您在浏览器中所期望的那样呈现,但就任何不考虑编码的刮板而言,基本上都是胡言乱语。
如果你喜欢这样的东西,你也可以用 CSS 来做到这一点:
<style>
my-email::after { content: attr(data-domain); }
my-email::before { content: attr(data-user); }
</style>
<my-email data-user="myemail" data-domain="mydomain.com">@</my-email>
或者,正如 Stack Overflow 上已经讨论的那样,您可以只使用 JavaScript。