TalkPHP

TalkPHP (http://www.talkphp.com/forums.php)
-   General (http://www.talkphp.com/general/)
-   -   Preventing Spam with PHP and Javascript (http://www.talkphp.com/general/1328-preventing-spam-php-javascript.html)

Wildhoney 10-23-2007 07:41 PM

Preventing Spam with PHP and Javascript
 
I'm curious as to individual's methods of preventing spam. The way I use is PHP, although sometimes I do use the Javascript method - though not often.

My PHP method

PHP Code:

switch(strtolower(@$_GET['txtMail']))
{
    case(
'adam'):         header('location: mailto:adam@talkphpDEMO.com');         break;
    case(
'karl'):         header('location: mailto:karl@talkphpDEMO.com');         break;
    case(
'peter'):     header('location: mailto:salathe@talkphpDEMO.com');     break;


A simple switch to determine which individual you want to email - then use PHP's native header function to forward you as if you clicked on a mailto link.

My Javascript method

As to be expected, this code is a little complex. Easily customisable, however, with the way I have wrote it.

As the Javascript code is ~50 lines, you may view it here. (Right click and view source to view the Javascript code itself)

The HTML is simple which allows Javascript to handle all the tricky stuff:

Code:

<div id="emailContainer">
        <label>Adam:</label><span></span>
        <br />
        <label>Karl:</label><span></span>
        <br />
        <label>Peter:</label><span></span>
</div>

Contact forms tend to distance people, I feel, but I still definitely use them. How do you display emails when a contact form is either too much or doesn't display that level of trust and professionalism you're looking for?

Gurnk 10-23-2007 07:51 PM

So is your javascript method breaking up the email so its not together in the source? If so, thats a good idea. I've been trying to think of a way to have links like that that doesn't have the email or contact info in the source.

Because I haven't wanted spam and haven't thought of a good way to stop it, I just use a contact form, and on that just have a simple question that verifies if its a human or bot. Not super super effective, but I usually don't have a huge spam problem.

EDIT: In PHP, could you break it up by just exploding it after a certain number of characters? Or does it have to be after a character has appeared.

Wildhoney 10-23-2007 10:05 PM

The Javascript splits it up nicely. Trouble with PHP's explode is that it is a superficial action as the email will still be printed in basic HTML - all together. In my PHP example above, you would do something like the following for your link:

Code:

<a href="mail.php?txtMail=adam">Email Adam</a>
It would then call the file with my code contained in it. If all goes well then the header function will relay the end user onto their default email client and open up a new email with the recipient set as the email address I specified in my PHP code under adam. That way the email addresses aren't exposed.

The PHP way is the more efficient method and also the method that will be more widely supported by many browsers. Most browsers, unless you explicitly tell them not to, redirect from the location attribute in the HTTP header response. Whereas, people know how to turn Javascript off with ease (And some browsers do not support Javascript), but disabling the HTTP header is something most people would not know how to do - nor actually want to. Read my header tutorial for further information.

Bottom line? PHP method beats the Javascript method hands down!

Gurnk 10-23-2007 11:38 PM

Ohhh. Lol I don't know why that PHP method didn't register in my brain when you posted the code. :p

This may be a dumb question, but what is stopping them from seeing the email in the source? Is it just that its in a separate file, so its not as likely to be crawled? (I feel like a nub again :p)

Andrew 10-24-2007 12:29 AM

I do it this way, which I just recently put into place.
Code:

        <script type="text/javascript">
        function noSpam(name, domain) {
                var email = name + "@" + domain;
                location.href = "mailto:" + email;
        }
        </script>

Code:

<a href="javascript:noSpam('admin', 'psdtocode.com');">emailing me</a>
I might try your way also, seems like a good plan.

maZtah 10-24-2007 10:48 AM

Quote:

Originally Posted by Gurnk (Post 3230)
This may be a dumb question, but what is stopping them from seeing the email in the source? Is it just that its in a separate file, so its not as likely to be crawled? (I feel like a nub again :p)

They can't see your php code.

Gurnk 10-24-2007 10:57 AM

I know that, but if you have to echo something out, they can see that. But I guess this method doesn't echo anything, so its fine.

maZtah 10-24-2007 11:02 AM

That's right! :)

Wildhoney 10-24-2007 11:15 AM

All you show is a normal link to another page, with the txtMail argument set to the name (not the email) of the person you want to email. The script then gets the email from inside, without echoing it out as a mailto link, and forwards them to their default email client.

Gurnk 10-24-2007 11:35 AM

Right right, I know. :) I was just wasn't thinking. (again) :p


All times are GMT. The time now is 05:55 PM.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.1.0