对机器人隐藏电子邮件地址 \- 保留 mailto:

新手上路,请多包涵

tl;博士

在不使用脚本的情况下隐藏机器人的电子邮件地址并保持 mailto: 功能。方法还必须支持屏幕阅读器。


概括

  • 不使用 脚本 或联系表格的电子邮件 混淆

  • 电子邮件地址需要对人类观众 完全可见保持 mailto: 功能

  • 电子邮件地址 不能是图像形式

  • 电子邮件地址 必须“完全”隐藏在垃圾邮件爬虫和垃圾邮件机器人 以及 任何其他类型的收割机


预期效果:

  • 不要脚本。项目中没有使用脚本, 我想保持这种状态

  • 电子邮件地址要么 显示在页面上, 要么可以在某种用户交互(如打开模式)后轻松显示。

  • 用户可以点击电子邮件地址,这反过来会触发 mailto: 功能。

  • 单击电子邮件将打开用户的电子邮件应用程序。

换句话说, mailto: 功能必须有效。

  • 电子邮件地址不可见或未被识别为机器人的电子邮件地址 (这包括页面源)

  • 我没有一个充满垃圾邮件的收件箱


什么 不起作用

  • 添加联系表格 - 或类似的东西 - 而不是电子邮件地址

我讨厌联系表格。我很少填写联系表。如果没有电子邮件地址,我会寻找电话号码,如果没有,我就会开始寻找替代服务。如果绝对必要,我只会填写联系表。

  • 用地址图像替换地址

这对使用屏幕阅读器的人来说是一个 巨大 的劣势( 请记住你未来项目中的视障人士

它还会 删除 mailto: 功能,除非您使图像可点击,然后添加 mailto: 功能作为 href 的目的 该电子邮件对机器人可见。


什么可能有效:

  • 巧妙使用 pseudo-elementsCSS

  • 使用 base64 编码的解决方案

  • 分解 电子邮件地址并将各个部分分布在文档中,然后在用户单击按钮时将它们重新组合在一起(这可能涉及多个 CSS 类和 anchor tags 的使用 --- )

  • 改变 html 属性通过 CSS

@MortezaAsadi 在下面的评论中优雅地提出了这种可能性。这是完整的链接——这篇文章来自 2012 年:

如果我们可以使用 CSS 来改变 HTML 属性会怎样?

  • 超出我知识范围的其他创造性解决方案。

类似的问题/修复

(这是 Joe Maller 建议的一个很好的修复,它运行良好,但它是 基于脚本的。这是它的样子;

 <SCRIPT TYPE="text/javascript">

  emailE = 'example.com'

  emailE = ('yourname' + '@' + emailE)

  document.write('<A href="mailto:' + emailE + '">' + emailE + '</a>')

</script>

<NOSCRIPT>

  Email address protected by JavaScript

</NOSCRIPT>

(一个聪明的解决方案,同时使用 PHPCSS 首先使用 PHP 反转 电子邮件,然后使用 CSS 反转它)一个非常有前途的解决方案,效果很好!但是 太容易解决了

(JavaScript 修复)

所选答案有效。它实际上工作得很好。它涉及将电子邮件编码为 html entities 。可以改进吗?

这是它的样子;

 <A HREF="mailto:

&#121;&#111;&#117;&#114;&#110;&#097;&#109;&#101;&#064;&#100;&#111;&#109;&#097;&#105;&#110;&#046;&#099;&#111;&#109;">

&#121;&#111;&#117;&#114;&#110;&#097;&#109;&#101;&#064;&#100;&#111;&#109;&#097;&#105;&#110;&#046;&#099;&#111;&#109;

</A>

(这个 SuperUser 问题的选定答案很棒,它展示了通过使用不同的混淆方法收到的垃圾邮件数量的研究。

似乎使用 CSS 处理电子邮件地址使其成为 rtl 确实有效。这与我在本节中链接到的第一个问题中使用的方法相同。

我不确定添加 mailto: 修复功能会对结果产生什么影响。

  • SO 上还有许多其他问题都有相似的答案。我还没有找到适合 我想要的效果的 东西

问题:

是否可以通过 组合两个或多个修复(甚至添加新修复)提高上述电子邮件混淆方法的效率(即尽可能少的垃圾邮件),同时:

A-维护 mailto: 功能;和

B- 支持屏幕阅读器


下面的许多答案和评论 提出了一个很好的问题,同时指出如果没有某种 js 就不可能这样做

提出/暗示 的问题是:

为什么不使用 js

答案是我对 js 过敏

不过开个玩笑,

我问这个问题的三个主要原因是:

  • 联系表格越来越多地被接受为提供电子邮件地址的替代品——他们不应该这样做。

  • 如果不用脚本 就可以完成,那么就 应该不用脚本就可以完成

  • 好奇心:( 因为我实际上正在使用 js 当前修复之一)我想看看 讨论这个问题是否会导致更好的方法。

原文由 user7234396 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 502
1 个回答

您的请求的问题特别是“支持屏幕阅读器”,因为根据定义屏幕阅读器是某种“机器人”。如果屏幕阅读器需要能够解释电子邮件地址,那么页面爬虫也能够解释它。

此外, mailto 属性的要点是如何在网络上处理电子邮件地址的标准。询问是否有第二种方法可以做到这一点有点像询问是否有第二个标准。

通过脚本执行此操作仍然会遇到相同的问题,因为一旦加载页面,脚本就会运行并且电子邮件地址会呈现在 DOM 中(除非您填充电子邮件地址 on click 或其他内容)。无论哪种方式,屏幕阅读器仍然会遇到问题,因为它尚未加载。

老实说,只需获得一个带有一半体面的垃圾邮件过滤器的电子邮件服务,并指定一个默认的主题行,这样您就可以轻松地在收件箱中进行分类。

 <a href="mailto:no-one@example.com?subject=Something to filter on">Email me</a>

您要问的是标准是否有两种做某事的方法,一种用于机器人,另一种用于非机器人。答案是没有,你必须尽你所能与机器人战斗。

原文由 k2snowman69 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏