…html- és url-encoding segítségével.
Forrás (JS-verzió): http://www.metaprog.com/samples/encoder.htm (2003)
PHP-funkció (futtatható): http://ideone.com/AUfv3o
// SPAM-PROTECTED MAILTO LINKS WITH HTMLENTITIES & URL-ENCODED CHARACTERS v2.0 - To, CC, BCC, Subject
// HTML-EXAMPLE: http://jsfiddle.net/krabat1/2v8ef5jc/
// http://codepen.io/krabat1/pen/zgswr
function spamsafe($email,$text = NULL,$cc = NULL,$bcc = NULL,$subj = NULL,$body = NULL){
if( isset( $email ) ){
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
echo('not valid');
return false;
}else{
$pattern="/([!#$%&'*+\/=?^_`{|}~\-@\.])/";
// email
if( $matches = preg_split($pattern, $email,NULL,PREG_SPLIT_DELIM_CAPTURE) ){
$str1='';
$str2='';
foreach($matches as $element){
if( strlen($element)>1 || preg_match("/([a-z0-9])/",$element) ){
$m2 = preg_split("//", $element, -1, PREG_SPLIT_NO_EMPTY);
foreach($m2 as $m3){
$str1.='%'.strtoupper(dechex(ord($m3)));
$str2.='&#'.ord($m3).';';
}
}else if( preg_match($pattern,$element) ){
$str1.='&#'.ord($element).';';
$str2.='&#'.ord($element).';';
}
}
// elements
$elements = array('mailto',':','?','&','=','cc','bcc','subject','body');
$elements_r = array();
foreach($elements as $e){
$e = preg_split("//", $e, -1, PREG_SPLIT_NO_EMPTY);
$e_r='';
foreach($e as $e2){
//if( preg_match("/([a-z0-9])/",$e2) ){
// $e_r.='%'.strtoupper(dechex(ord($e2)));
//}else{
$e_r.='&#'.ord($e2).';';
//}
}
array_push($elements_r,$e_r);
}
$mailto_str = $elements_r[0];
$colon_str = $elements_r[1];
$question_str = $elements_r[2];
$amper_str = $elements_r[3];
$equals_str = $elements_r[4];
$cc_str = $elements_r[5];
$bcc_str = $elements_r[6];
$subject_str = $elements_r[7];
$body_str = $elements_r[8];
//texts
$texts=array('text' => $text,'cc' => $cc,'bcc' => $bcc,'subj' => $subj,'body' => $body);
$texts_r=array();
foreach($texts as $tk => $tv){
if( !is_null($tv) ){
$tv2 = preg_split("//", $tv, -1, PREG_SPLIT_NO_EMPTY);
$str='';
if($tk=='cc'){
$str.=$cc_str.$equals_str;
}else if($tk=='bcc'){
$str.=$bcc_str.$equals_str;
}else if($tk=='subj'){
$str.=$subject_str.$equals_str;
}else if($tk=='body'){
$str.=$body_str.$equals_str;
}
foreach($tv2 as $tv3){
//$str.='%'.strtoupper(dechex(ord($tv3)));
$str.='&#'.ord($tv3).';';
}
$texts_r[$tk]=$str;
}
}
//$texts_rk=array_keys($texts_r);
if( isset($texts_r['text']) ){
$text0=$texts_r['text'];
unset($texts_r['text']);
}
$texts_rv=array_values($texts_r);
//start final string
$final='<a href="'.$mailto_str.$colon_str.$str1;
if( count($texts_rv) > 0 ){
$final.=$question_str.implode($amper_str,$texts_rv);
}
if( isset($text0) ){
$texts_r=array('text' => $text0);
}
$final.='">';
if( is_null($text) ){
$final.=$str2;
}else{
$final.=$texts_r['text'];
}
$final.='</a>';
return $final;
}
}
}
}
echo( spamsafe('recipient@domain.com') . '
<br/>');
echo( spamsafe('recipient@domain.com','Email Us!') . '
<br/>');
echo( spamsafe('recipient@domain.com','Email Us!','other@domain.com') . '
<br/>');
echo( spamsafe('recipient@domain.com','Email Us!','other@domain.com',NULL,'Enquiry regarding product #0022') . '
<br/>');
echo( spamsafe('recipient@domain.com','Email Us!','other@domain.com','hidden@domain.com','Enquiry regarding product #0022','I would like more information on product #0022') . '
<br/>');
Simple
recipient@domain.com
Link text
Email Us!
Link text, cc
Email Us!
Link text, cc, subject
Email Us!
Link text, cc, bcc, subject, body
Email Us!