邮箱防采集混淆
一行一个邮箱,生成可直接贴进页面的 HTML 源码:把 @ 换成实体、插入零宽空格、生成 mailto 链接或 [at] 文本,纯浏览器本地处理,不联网不发送。
四种混淆的区别
藏 @ 把 @ 换成 <code>@</code>(或十六进制),页面显示完全正常,直接读源码看不到完整地址。
零宽字符在 @ 位置插一个 <code>​</code>,显示上看不出来,但复制出来的地址会带上不可见字符,所以只适合展示、不适合让人直接复制。
mailto 链接生成整段 <code><a></code> 标签,链接目标里的 @ 照样按上面的方式藏起来;[at] 文本是把地址写成 <code>hi [at] example [dot] com</code>,适合本来就要给人看的正文。
防的到底是什么
这类写法拦的是「正则一把抓邮箱」的采集脚本 —— 页面上还看得出这是邮箱,但按 <code>[a-z]+@[a-z.]+</code> 那种规则扫不到完整串。
对浏览器渲染、点击发信、邮件客户端识别都没有影响。真心要防采集,还得配合服务端限流或验证码,混淆只是加一层。
实体还是零宽字符
实体是 HTML 字符引用,写在源码里就是一个 <code>&</code> 开头的数字,渲染后显示成原字符,部分采集脚本会先把实体解码再匹配。
零宽字符是真实字符(U+200B),实体形式更利于跨编辑器存活 —— 某些编辑器会悄悄删掉不可见字符,所以默认输出 <code>&#8203;</code>。
常见问题
开了「字母也转实体」会不会影响显示?
不会,渲染结果完全一样,只是源码里看不到有意义的字母。缺点是体积大、可读性差,出问题时不好排查。
为什么有的行被跳过了?
一行里必须有且只有一个 @、两端不能有空格。跳过的行数会显示在上面的统计里,不会悄悄丢。
能防住现在这些 AI 爬虫吗?
不能。它们会执行 JS、把实体解码后再取文本,也可能直接用浏览器渲染。这一层只对简单正则采集有效。