【发布时间】:2017-01-23 15:02:38
【问题描述】:
我想在我的网页上混淆一个电子邮件地址。我希望避免使用 JS,以防我的用户停用它。
我找到了这个宝石:actionview-encoded_mail_to,但它似乎对我不起作用。它在页面上显示完整的电子邮件地址(这很好),但它也在控制台中显示。
我尝试了 3 个示例,结果相同。 gem 出现在我的 Gemfile 中,因此应该正确安装。
【问题讨论】:
标签: ruby-on-rails ruby email-spam
我想在我的网页上混淆一个电子邮件地址。我希望避免使用 JS,以防我的用户停用它。
我找到了这个宝石:actionview-encoded_mail_to,但它似乎对我不起作用。它在页面上显示完整的电子邮件地址(这很好),但它也在控制台中显示。
我尝试了 3 个示例,结果相同。 gem 出现在我的 Gemfile 中,因此应该正确安装。
【问题讨论】:
标签: ruby-on-rails ruby email-spam
您始终可以自己滚动,但首先,该宝石绝对有效。这就是我所做的......
我将 gem 添加到 Rails 4.2 应用程序:
# Gemfile
gem 'actionview-encoded_mail_to'
我安装了它:
$ bundle install
我进入了控制台:
$ rails console
我在控制台中提供了辅助方法:
include ActionView::Helpers::UrlHelper
使用与示例相同的参数调用 mail_to 助手:
mail_to "me@domain.com", nil, replace_at: "_at_", replace_dot: "_dot_", class: "email"
...得到了这个结果:
"<a class=\"email\" href=\"mailto:me@domain.com\">me_at_domain_dot_com</a>"
"me_at_domain_dot_com" 看起来被正确混淆了。你采取了哪些措施?
这将是一个简单的字符串替换来混淆电子邮件字符串,我们可以使用sub:
def obfuscate_email(email, replace_at: '_at_', replace_dot: '_dot_')
email.sub("@", replace_at).sub ".", replace_dot
end
我在控制台中对此进行了测试:
obfuscate_email "me@example.com"
# => "me_at_example_dot_com"
您可以将该方法放在application_helper.rb 中并在您的任何视图中使用它:
link_to obfuscate_email(user.email), "mailto:#{user.email}"
# => "<a href=\"mailto:me@example.com\">me_at_example_dot_com</a>"
请注意,href 必须是未混淆的电子邮件才能正常工作。
mail_to 助手def obfuscated_mail_to(email, options = {})
link_to obfuscate_email(email), "mail_to:#{email}", options
end
在控制台中测试:
obfuscated_mail_to "me@example.com", class: "email"
=> "<a class=\"email\" href=\"mail_to:me@example.com\">me_at_example_dot_com</a>"
希望有帮助!
【讨论】:
href 没有被混淆,因为那样它就不起作用了。它会打开您的邮件客户端并将经过混淆的电子邮件添加到电子邮件的to: 字段,因此您必须在发送电子邮件之前对其进行去混淆处理。你必须做出决定,你想要一个正常工作的mail_to 还是你想要完全混淆电子邮件并剥夺它的默认功能?在后一种情况下,只需将混淆后的电子邮件作为纯字符串放在您的页面上:My email: <%= obfuscate_email user.email %>