杨二

Machine repeats, Human creates

隐藏email地址的小技巧

spam bot

引子

我们经常会受到垃圾邮件的骚扰,究其原因,其中主要就是平时 email 地址赤裸裸地暴露在网页中,被垃圾邮件程序(spambot)探测到,进而向你的邮箱发送大量的营销信息,恶心到吐。

怎么办

上面提到的问题解决办法有许多,这里列举几个常用的:

  • 使用图片(使用谷歌邮箱的同学应该有所体会)
  • 使用 javascript 输出(爬虫只探测静态 HTML)
  • 使用 AT, DOT,代替@,.(好像现在一些爬虫也能识别了)
  • 简单加密,比如:foo@REMOVETHISbar.baz,真正的 email 是去掉 REMOVETHIS之后的(也可以更形象点 foo@REMOVETHISbar.baz
  • 使用 CSS 中的伪类:after
p:after { content: "foo\\40bar.baz"; }

<p>email me:</p>

/* \\40 是Unicode字符 '@'*/ email me: foo@bar.baz
  • 使用 flash
<object
  type="application/x-shockwave-flash"
  data="media/flash/articles/email.swf"
  codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0"
>
  <param name="movie" value="media/email.swf" />
</object>

最优解

世界上本来没有最优解,用的人觉得很爽,于是就有了。 —詹姆斯.杨二

我个人比较喜欢最小化成本解决问题,所以除了上述几种方式,我更倾向于下面这种:
不知道你有没有发现,Unicode 中有个和 **@**符号很像的字符:0xFF20,除此之外,还有个和 **.**很像的字符:0x2024。那么这两个 Unicode 字符在此处就有用武之地了。在网页里,我们可以把 foo@bar.com 编码为

1

foo@BAR․com

最终显示效果:foo@BAR․com

很强大有木有!

这种方式也不是完美无缺:

  • 如果流行普及了,爬虫会重新设计算法将其也计入探测范围。
  • 使用复制粘贴并非预期文本

总之,没有最好,只有最合适的。

参考