From 45db66de56d4f5c4cd83aba782015d5ce752f3a2 Mon Sep 17 00:00:00 2001 From: David Heinemeier Hansson Date: Mon, 24 Jan 2005 13:48:24 +0000 Subject: Added :encode option to mail_to that'll allow you to masquarede the email address behind javascript or hex encoding #494 [Lucas Carlson] git-svn-id: http://svn-commit.rubyonrails.org/rails/trunk@493 5ecf4fe2-1ee6-0310-87b1-e25e094e27de --- actionpack/lib/action_view/helpers/url_helper.rb | 29 +++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'actionpack/lib/action_view/helpers/url_helper.rb') diff --git a/actionpack/lib/action_view/helpers/url_helper.rb b/actionpack/lib/action_view/helpers/url_helper.rb index 0113c42eb7..0661c961b6 100644 --- a/actionpack/lib/action_view/helpers/url_helper.rb +++ b/actionpack/lib/action_view/helpers/url_helper.rb @@ -91,8 +91,35 @@ module ActionView # Creates a link tag for starting an email to the specified email_address, which is also used as the name of the # link unless +name+ is specified. Additional HTML options, such as class or id, can be passed in the html_options hash. + # + # You can also make it difficult for spiders to harvest email address by obfuscating them. + # Examples: + # * mail_to "me@domain.com", "My email", :encode => "javascript" + # => + # * mail_to "me@domain.com", "My email", :encode => "hex" + # => My email def mail_to(email_address, name = nil, html_options = {}) - content_tag "a", name || email_address, html_options.merge({ "href" => "mailto:#{email_address}" }) + encode = html_options[:encode] + html_options.delete(:encode) + string = '' + if encode == 'javascript' + tmp = "document.write('#{content_tag("a", name || email_address, html_options.merge({ "href" => "mailto:"+email_address.to_s }))}');" + for i in 0...tmp.length + string << sprintf("%%%x",tmp[i]) + end + "" + elsif encode == 'hex' + for i in 0...email_address.length + if email_address[i,1] =~ /\w/ + string << sprintf("%%%x",email_address[i]) + else + string << email_address[i,1] + end + end + content_tag "a", name || email_address, html_options.merge({ "href" => "mailto:#{string}" }) + else + content_tag "a", name || email_address, html_options.merge({ "href" => "mailto:#{email_address}" }) + end end private -- cgit v1.2.3