fork download
  1. <?php
  2. // SPAM-PROTECTED MAILTO LINKS WITH HTMLENTITIES & URL-ENCODED CHARACTERS v2.0 - To, CC, BCC, Subject
  3. // HTML-EXAMPLE: http://j...content-available-to-author-only...e.net/krabat1/2v8ef5jc/
  4. // http://c...content-available-to-author-only...n.io/krabat1/pen/zgswr
  5.  
  6. function spamsafe($email,$text = NULL,$cc = NULL,$bcc = NULL,$subj = NULL,$body = NULL){
  7. if( isset( $email ) ){
  8. if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
  9. echo('not valid');
  10. return false;
  11. }else{
  12. $pattern="/([!#$%&'*+\/=?^_`{|}~\-@\.])/";
  13. // email
  14. if( $matches = preg_split($pattern, $email,NULL,PREG_SPLIT_DELIM_CAPTURE) ){
  15. $str1='';
  16. $str2='';
  17. foreach($matches as $element){
  18. if( strlen($element)>1 || preg_match("/([a-z0-9])/",$element) ){
  19. $m2 = preg_split("//", $element, -1, PREG_SPLIT_NO_EMPTY);
  20. foreach($m2 as $m3){
  21. $str1.='%'.strtoupper(dechex(ord($m3)));
  22. $str2.='&#'.ord($m3).';';
  23. }
  24. }else if( preg_match($pattern,$element) ){
  25. $str1.='&#'.ord($element).';';
  26. $str2.='&#'.ord($element).';';
  27. }
  28. }
  29. // elements
  30. $elements = array('mailto',':','?','&','=','cc','bcc','subject','body');
  31. $elements_r = array();
  32. foreach($elements as $e){
  33. $e = preg_split("//", $e, -1, PREG_SPLIT_NO_EMPTY);
  34. $e_r='';
  35. foreach($e as $e2){
  36. //if( preg_match("/([a-z0-9])/",$e2) ){
  37. // $e_r.='%'.strtoupper(dechex(ord($e2)));
  38. //}else{
  39. $e_r.='&#'.ord($e2).';';
  40. //}
  41.  
  42. }
  43. array_push($elements_r,$e_r);
  44. }
  45. $mailto_str = $elements_r[0];
  46. $colon_str = $elements_r[1];
  47. $question_str = $elements_r[2];
  48. $amper_str = $elements_r[3];
  49. $equals_str = $elements_r[4];
  50. $cc_str = $elements_r[5];
  51. $bcc_str = $elements_r[6];
  52. $subject_str = $elements_r[7];
  53. $body_str = $elements_r[8];
  54.  
  55. //texts
  56. $texts=array('text' => $text,'cc' => $cc,'bcc' => $bcc,'subj' => $subj,'body' => $body);
  57. $texts_r=array();
  58. foreach($texts as $tk => $tv){
  59. if( !is_null($tv) ){
  60. $tv2 = preg_split("//", $tv, -1, PREG_SPLIT_NO_EMPTY);
  61. $str='';
  62. if($tk=='cc'){
  63. $str.=$cc_str.$equals_str;
  64. }else if($tk=='bcc'){
  65. $str.=$bcc_str.$equals_str;
  66. }else if($tk=='subj'){
  67. $str.=$subject_str.$equals_str;
  68. }else if($tk=='body'){
  69. $str.=$body_str.$equals_str;
  70. }
  71. foreach($tv2 as $tv3){
  72. //$str.='%'.strtoupper(dechex(ord($tv3)));
  73. $str.='&#'.ord($tv3).';';
  74. }
  75. $texts_r[$tk]=$str;
  76. }
  77. }
  78. //$texts_rk=array_keys($texts_r);
  79. if( isset($texts_r['text']) ){
  80. $text0=$texts_r['text'];
  81. unset($texts_r['text']);
  82. }
  83. $texts_rv=array_values($texts_r);
  84. //start final string
  85. $final='<a href="'.$mailto_str.$colon_str.$str1;
  86.  
  87. if( count($texts_rv) > 0 ){
  88. $final.=$question_str.implode($amper_str,$texts_rv);
  89. }
  90. if( isset($text0) ){
  91. $texts_r=array('text' => $text0);
  92. }
  93. $final.='">';
  94. if( is_null($text) ){
  95. $final.=$str2;
  96. }else{
  97. $final.=$texts_r['text'];
  98. }
  99. $final.='</a>';
  100. return $final;
  101. }
  102. }
  103. }
  104. }
  105.  
  106. echo( spamsafe('recipient@domain.com') . '
  107. <br/>');
  108. echo( spamsafe('recipient@domain.com','Email Us!') . '
  109. <br/>');
  110. echo( spamsafe('recipient@domain.com','Email Us!','other@domain.com') . '
  111. <br/>');
  112. echo( spamsafe('recipient@domain.com','Email Us!','other@domain.com',NULL,'Enquiry regarding product #0022') . '
  113. <br/>');
  114. 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') . '
  115. <br/>');
  116.  
  117. ?>
  118.  
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
<a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;%72%65%63%69%70%69%65%6E%74&#64;%64%6F%6D%61%69%6E&#46;%63%6F%6D">&#114;&#101;&#99;&#105;&#112;&#105;&#101;&#110;&#116;&#64;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#99;&#111;&#109;</a>
<br/><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;%72%65%63%69%70%69%65%6E%74&#64;%64%6F%6D%61%69%6E&#46;%63%6F%6D">&#69;&#109;&#97;&#105;&#108;&#32;&#85;&#115;&#33;</a>
<br/><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;%72%65%63%69%70%69%65%6E%74&#64;%64%6F%6D%61%69%6E&#46;%63%6F%6D&#63;&#99;&#99;&#61;&#111;&#116;&#104;&#101;&#114;&#64;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#99;&#111;&#109;">&#69;&#109;&#97;&#105;&#108;&#32;&#85;&#115;&#33;</a>
<br/><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;%72%65%63%69%70%69%65%6E%74&#64;%64%6F%6D%61%69%6E&#46;%63%6F%6D&#63;&#99;&#99;&#61;&#111;&#116;&#104;&#101;&#114;&#64;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#99;&#111;&#109;&#38;&#115;&#117;&#98;&#106;&#101;&#99;&#116;&#61;&#69;&#110;&#113;&#117;&#105;&#114;&#121;&#32;&#114;&#101;&#103;&#97;&#114;&#100;&#105;&#110;&#103;&#32;&#112;&#114;&#111;&#100;&#117;&#99;&#116;&#32;&#35;&#48;&#48;&#50;&#50;">&#69;&#109;&#97;&#105;&#108;&#32;&#85;&#115;&#33;</a>
<br/><a href="&#109;&#97;&#105;&#108;&#116;&#111;&#58;%72%65%63%69%70%69%65%6E%74&#64;%64%6F%6D%61%69%6E&#46;%63%6F%6D&#63;&#99;&#99;&#61;&#111;&#116;&#104;&#101;&#114;&#64;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#99;&#111;&#109;&#38;&#98;&#99;&#99;&#61;&#104;&#105;&#100;&#100;&#101;&#110;&#64;&#100;&#111;&#109;&#97;&#105;&#110;&#46;&#99;&#111;&#109;&#38;&#115;&#117;&#98;&#106;&#101;&#99;&#116;&#61;&#69;&#110;&#113;&#117;&#105;&#114;&#121;&#32;&#114;&#101;&#103;&#97;&#114;&#100;&#105;&#110;&#103;&#32;&#112;&#114;&#111;&#100;&#117;&#99;&#116;&#32;&#35;&#48;&#48;&#50;&#50;&#38;&#98;&#111;&#100;&#121;&#61;&#73;&#32;&#119;&#111;&#117;&#108;&#100;&#32;&#108;&#105;&#107;&#101;&#32;&#109;&#111;&#114;&#101;&#32;&#105;&#110;&#102;&#111;&#114;&#109;&#97;&#116;&#105;&#111;&#110;&#32;&#111;&#110;&#32;&#112;&#114;&#111;&#100;&#117;&#99;&#116;&#32;&#35;&#48;&#48;&#50;&#50;">&#69;&#109;&#97;&#105;&#108;&#32;&#85;&#115;&#33;</a>
<br/>