杨二

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

很强大有木有!

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

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

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

参考