2

我正在使用 PHP 编程,并希望创建具有电子邮件地址的网页,这些电子邮件地址很容易被人类阅读,但不容易被垃圾邮件发送者收集。电子邮件地址来自用户输入,我想我可以使用正则表达式来识别地址,但我不清楚我应该如何替换电子邮件地址或用什么替换,以防止大多数自动垃圾邮件机器人收获它们。

这是一个想法:(伪代码)

(email)@(domain.com) $1<span class="remove">DELETE</span>$2

.remove {
   display: none;
}

希望机器人会在 span 标签上绊倒。

最后,我正在寻找一种不会干扰mailto:标签内的电子邮件地址的解决方案。

如何 防止阻止机器人收集电子邮件地址?哪些方法可以保护网站上的电子邮件免受垃圾邮件机器人的侵害?也许还有一些其他人......

4

4 回答 4

8

使用GD并创建您的电子邮件 ID 的图像

您可以使用PHP GD 库轻松创建任何给定文本的图像。

示例代码如下所示,

<?php
  header("Content-type: image/png");
  $im = @imagecreate(110, 20)or die("Cannot Initialize new GD image stream");
  $background_color = imagecolorallocate($im, 0, 0, 0);
  $text_color = imagecolorallocate($im, 255, 255, 255);
  imagestring($im, 1, 5, 5,  "anything@domain.com", $text_color);
  imagepng($im);
  imagedestroy($im);
?>

好处:

  • 垃圾邮件发送者不能只捕获它,除非他们使用 OCR:p
  • 非常低的开销,使用 PNG/GIF 格式
  • 可以为任何文本动态创建

缺点:

  • 无法点击邮件,作为链接
  • 不能与 TTS 引擎一起使用,这是视觉障碍者的 -ve。
于 2008-12-22T06:22:53.463 回答
7

您也可以使用 CSS 对其进行混淆...

<span class="email-encrypt">moc.liamelgoog@avynnib<span class="email-decrypt-message">(Reverse this text to get my Email address)</span></span>

/*Decrypt Email */
.email-encrypt {
    unicode-bidi:bidi-override;
    direction: rtl;
}
.email-encrypt .email-decrypt-message {
    display:none;
}

编辑:这里,源中的电子邮件地址是相反的——CSS 语句的作用是将电子邮件地址恢复为其原始形式。我希望这是有道理的。

但我不确定这有多有效 - 有许多机器人模拟浏览器环境。我想我最好说类似的东西 - 我的电子邮件是 binnyva,googlemail。

于 2008-12-22T07:17:34.070 回答
3

一种选择:javascript 电子邮件混淆,以及禁用 javascript 时的图像

于 2008-12-22T05:58:49.393 回答
0

上面的技巧(使用 CSS)几乎肯定不会奏效。我不知道机器人是否会费心看 CSS,事实上我不完全确定它们是否阅读 HTML,它们可能只是匹配某些正则表达式上的整个页面。

另一方面,这使得用垃圾邮件陷阱毒化他们的列表变得非常容易。如果您希望特定地址接收垃圾邮件(并且仅限垃圾邮件)来训练您的过滤器,您可以将电子邮件地址放在普通用户无法看到或点击的页面中,只有垃圾邮件机器人。

事实上,做一个实验——用不同类型的链接写一些不同的电子邮件地址,看看他们收到了多少垃圾邮件。

几个月前,我在我的网站上使用正常链接进行了尝试,在陷阱开始接收垃圾邮件之前花了大约三周时间。

于 2008-12-22T07:51:36.593 回答