Avatar billede klgn Nybegynder
02. juli 2006 - 12:17 Der er 7 kommentarer og
1 løsning

Spamsikring af emailadresser

Hejsa!

Nå nu man har en stationær side som http://www.melodigrandprixfanklub.dk/kontakt/ og gerne vil have spamsikring på den, hvordan gør jeg så det smartest?
Siden bliver vedligeholdt via et standardadmin og ligger således i en mysql-database.
Jeg tænker, man kunne lave noget replace-hejhej omkring emailadresserne. Men det skulle gerne være sådan, at når man klikker på emailadresserne, så åbner dit mailprogram og du kan sende en email, sådan som det er i dag.
Har I nogle forslag?
Jeg har smidt den her, men var i tvivl om, jeg skulle smide den i javascript.
På forhånd tak:)
Avatar billede iss Novice
02. juli 2006 - 12:42 #1
JS ville nok have hjulpet dig lidt bedre, du kunne evt bruge den måde at Smarty gør det på:
<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/


/**
* Smarty {mailto} function plugin
*
* Type:    function<br>
* Name:    mailto<br>
* Date:    May 21, 2002
* Purpose:  automate mailto address link creation, and optionally
*          encode them.<br>
* Input:<br>
*        - address = e-mail address
*        - text = (optional) text to display, default is address
*        - encode = (optional) can be one of:
*                * none : no encoding (default)
*                * javascript : encode with javascript
*                * javascript_charcode : encode with javascript charcode
*                * hex : encode with hexidecimal (no javascript)
*        - cc = (optional) address(es) to carbon copy
*        - bcc = (optional) address(es) to blind carbon copy
*        - subject = (optional) e-mail subject
*        - newsgroups = (optional) newsgroup(s) to post to
*        - followupto = (optional) address(es) to follow up to
*        - extra = (optional) extra tags for the href link
*
* Examples:
* <pre>
* {mailto address="me@domain.com"}
* {mailto address="me@domain.com" encode="javascript"}
* {mailto address="me@domain.com" encode="hex"}
* {mailto address="me@domain.com" subject="Hello to you!"}
* {mailto address="me@domain.com" cc="you@domain.com,they@domain.com"}
* {mailto address="me@domain.com" extra='class="mailto"'}
* </pre>
* @link http://smarty.php.net/manual/en/language.function.mailto.php {mailto}
*          (Smarty online manual)
* @version  1.2
* @author  Monte Ohrt <monte at ohrt dot com>
* @author  credits to Jason Sweat (added cc, bcc and subject functionality)
* @param    array
* @param    Smarty
* @return  string
*/
function smarty_function_mailto($params, &$smarty)
{
    $extra = '';

    if (empty($params['address'])) {
        $smarty->trigger_error("mailto: missing 'address' parameter");
        return;
    } else {
        $address = $params['address'];
    }

    $text = $address;

    // netscape and mozilla do not decode %40 (@) in BCC field (bug?)
    // so, don't encode it.
    $mail_parms = array();
    foreach ($params as $var=>$value) {
        switch ($var) {
            case 'cc':
            case 'bcc':
            case 'followupto':
                if (!empty($value))
                    $mail_parms[] = $var.'='.str_replace('%40','@',rawurlencode($value));
                break;
               
            case 'subject':
            case 'newsgroups':
                $mail_parms[] = $var.'='.rawurlencode($value);
                break;

            case 'extra':
            case 'text':
                $$var = $value;

            default:
        }
    }

    $mail_parm_vals = '';
    for ($i=0; $i<count($mail_parms); $i++) {
        $mail_parm_vals .= (0==$i) ? '?' : '&';
        $mail_parm_vals .= $mail_parms[$i];
    }
    $address .= $mail_parm_vals;

    $encode = (empty($params['encode'])) ? 'none' : $params['encode'];
    if (!in_array($encode,array('javascript','javascript_charcode','hex','none')) ) {
        $smarty->trigger_error("mailto: 'encode' parameter must be none, javascript or hex");
        return;
    }

    if ($encode == 'javascript' ) {
        $string = 'document.write(\'<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>\');';

        $js_encode = '';
        for ($x=0; $x < strlen($string); $x++) {
            $js_encode .= '%' . bin2hex($string[$x]);
        }

        return '<script type="text/javascript">eval(unescape(\''.$js_encode.'\'))</script>';

    } elseif ($encode == 'javascript_charcode' ) {
        $string = '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>';

        for($x = 0, $y = strlen($string); $x < $y; $x++ ) {
            $ord[] = ord($string[$x]); 
        }

        $_ret = "<script type=\"text/javascript\" language=\"javascript\">\n";
        $_ret .= "<!--\n";
        $_ret .= "{document.write(String.fromCharCode(";
        $_ret .= implode(',',$ord);
        $_ret .= "))";
        $_ret .= "}\n";
        $_ret .= "//-->\n";
        $_ret .= "</script>\n";
       
        return $_ret;
       
       
    } elseif ($encode == 'hex') {

        preg_match('!^(.*)(\?.*)$!',$address,$match);
        if(!empty($match[2])) {
            $smarty->trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.");
            return;
        }
        $address_encode = '';
        for ($x=0; $x < strlen($address); $x++) {
            if(preg_match('!\w!',$address[$x])) {
                $address_encode .= '%' . bin2hex($address[$x]);
            } else {
                $address_encode .= $address[$x];
            }
        }
        $text_encode = '';
        for ($x=0; $x < strlen($text); $x++) {
            $text_encode .= '&#x' . bin2hex($text[$x]).';';
        }

        $mailto = "&#109;&#97;&#105;&#108;&#116;&#111;&#58;";
        return '<a href="'.$mailto.$address_encode.'" '.$extra.'>'.$text_encode.'</a>';

    } else {
        // no encoding
        return '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>';

    }

}

/* vim: set expandtab: */

?>
Avatar billede klgn Nybegynder
02. juli 2006 - 13:05 #2
Ja ok - jeg må erkende, at jeg ikke lige kan gennemskue den kode 100 pct.
Men på din opfordring vil jeg poste denne i js i stedet i håb om at finde noget, der er lettere at gå til. Du skal dog have point for indsatsen, post et svar:)
Avatar billede iss Novice
02. juli 2006 - 16:27 #3
Nu er det ikke en så svær kode:
$address = "to@email.com"; // modtager
$extra = ""; // bcc subj osv...
$text = "til navn"; // Link navn

$string = '<a href="mailto:'.$address.'" '.$extra.'>'.$text.'</a>';
for($x = 0, $y = strlen($string); $x < $y; $x++ ) {
    $ord[] = ord($string[$x]);
}

$_ret = "<script type=\"text/javascript\" language=\"javascript\">\n";
$_ret .= "<!--\n";
$_ret .= "{document.write(String.fromCharCode(";
$_ret .= implode(',',$ord);
$_ret .= "))";
$_ret .= "}\n";
$_ret .= "//-->\n";
$_ret .= "</script>\n";

echo $_ret;
f.eks det var så javascript_charcode delen, de andre er lige så (hvis du hellere vil bruge en af dem)
Avatar billede klgn Nybegynder
02. juli 2006 - 18:17 #4
Men hvordan skal jeg få den til at virke, når jeg indtaster emailadresserne som del af et længere tekststykke og ikke som seperat felt i mit admin.
Har du set den side, det drejer sig om?
Avatar billede iss Novice
02. juli 2006 - 18:42 #5
Så er der ikke andet for du må igang manuelt:
<script type="text/javascript" language="javascript">
<!--
{document.write(String.fromCharCode(60,97,32,104,114,101,102,61,34,109,97,105,108,116,111,58,102,111,114,109,97,110,100,64,109,101,108,111,100,105,103,114,97,110,100,112,114,105,120,102,97,110,107,108,117,98,46,100,107,34,32,62,102,111,114,109,97,110,100,64,109,101,108,111,100,105,103,114,97,110,100,112,114,105,120,102,97,110,107,108,117,98,46,100,107,60,47,97,62))}
//-->
</script>
Avatar billede klgn Nybegynder
03. juli 2006 - 07:27 #6
Jeg takker - så må jeg i gang pr håndkraft:)
Smid et svar, og du vil modtage dine points;)
Avatar billede iss Novice
03. juli 2006 - 08:47 #7
Ellers tak...
Avatar billede klgn Nybegynder
03. juli 2006 - 09:43 #8
Så tager jeg dem selv.
Tak for hjælpen:)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester