简体   繁体   中英

How to display an email address for users but hide from robot? Is there a simply way to do it using PHP, Javascript or Jquery?

使用PHP,Javascript或Jquery有一种优雅,简单/简单的方法吗?

There are many ways of doing this. We've had som luck obfuscating source via python/javascript. Another simpler favourite is the CSS unicode-bidi technique:

div.contact { unicode-bidi:bidi-override; direction: rtl; }
<div class="contact">moc.rab@oof</div>

Prints out:

foo@bar.com

You might want to look into reCAPTCHA Mailhide . It should be easy to use from PHP.

You can use the PHP imagestring() function to create an image.

<?php
// Create a 100*30 image
$im = imagecreate(120, 30);

// White background and blue text
$bg = imagecolorallocate($im, 255, 255, 255);
$textcolor = imagecolorallocate($im, 0, 0, 255);

// Write the email address at the top left
imagestring($im, 5, 0, 0, 'test@test.com', $textcolor);

// Output the image
header('Content-type: image/png');

imagepng($im);
imagedestroy($im);
?>

Obfuscation using trickiest possible HTML entities and urlencode, implemented in PHP: http://hcard.geekhood.net/encode/

Source: http://code.google.com/p/hcardvalidator/source/browse/trunk/encode/index.php

Another approach I use is:

<a href="mailto:me@myserver.removethis.com">
<script>[…] a.href = a.href.replace(/removethis\./,'');</script>

It's worth noting that both techniques give users perfectly accessible, clickable link.

never write email addresses as text on webpages, NEVER!

and browser bots surely have JS enabled -_-

you can try changing name@example.com to: "name at example dot com".

However, robots can easily account for this.

Otherwise, you could display a dynamic image of the email address if you are truly motivated.

It's not a perfect solution, but the Enkoder ( http://hivelogic.com/enkoder ) is quite useful for this. It uses Javascript to obfuscate the address.

Ok. So after a while, I've found this blog article on how to do this easily. http://techblog.tilllate.com/2008/07/20/ten-methods-to-obfuscate-e-mail-addresses-compared/ And how much impact does it do on spam receiving ..

I guess this could be complementary to the info given above .. Cheers!

Would this work as well??

Using something like this

<span>myaddress</span><span>@</span><span>mydomain.com</span>

This won't stand as a link, but would still be recognizable by the human eye on a page, and probably con't be parsed by a robot. Haven't checked it out, thou. You could probably insert that string into a void and bind it to a function that composes the address by parsing out the content ..

Just a fast thought ...

This is difficult to do. Unless you use an image, anything which is rendered human-readable by your browser can be rendered human-readable by a robot. So even scrambling the e-email in some way in the HTML source and then using a javascript function to de-scramble dynamically on page rendering, this will be defeated by a robot which also does full rendering of the DOM.

Until recently I had good success with the above method, and didn't see any spam. Recently however I have noticed that addresses do seem to have been picked up. So I can only assume e-mail trawlers are now doing full DOM rendering.

So to conclude - an image is probably best (although even that is not 100%)

Here is a simple jquery solution to this problem:

<script type="text/javascript">
$(document).ready(function() {
    str1="mailto:";
    str2="info";
    str3="@test.com";
    $("#email_a").attr("href", str1+str2+str3);

});
</script>

<a href="#" id="email_a"><img src="sample.png"/></a>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM