Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
5 | daniel-mar | 1 | <?php |
2 | |||
3 | // This is an example of the ViaThinkSoft AntiSpam 3.02 |
||
4 | // for ViaThinkSoft Sigma as filter plugin (modified $content) |
||
5 | // Use it for your website! |
||
6 | |||
7 | // CONFIGURATION |
||
8 | |||
9 | define('CFG_MAKE_MAIL_ADDRESSES_CLICKABLE', true); |
||
10 | |||
11 | // CODE |
||
12 | |||
13 | function secure_email_triv($email) |
||
14 | { |
||
15 | if (!function_exists('alas_js_crypt')) |
||
16 | { |
||
17 | function alas_js_crypt($text) |
||
18 | { |
||
19 | $tmp = ''; |
||
20 | for ($i=0; $i<strlen($text); $i++) |
||
21 | { |
||
22 | $tmp .= 'document.write("&#'.ord(substr($text, $i, 1)).';");'; |
||
23 | } |
||
24 | return $tmp; |
||
25 | } |
||
26 | } |
||
27 | |||
28 | $aus = ''; |
||
29 | if ($email != '') |
||
30 | { |
||
31 | $aus .= '<script language="JavaScript" type="text/javascript"><!--'."\n"; |
||
32 | $aus .= alas_js_crypt($email); |
||
33 | $aus .= '// --></script>'; |
||
34 | } |
||
35 | return $aus; |
||
36 | } |
||
37 | |||
38 | // PHP-AntiSpam-Funktion "secure_email", Version 3.02 |
||
39 | // von Daniel Marschall [www.daniel-marschall.de] |
||
40 | |||
41 | function secure_email($email, $linktext, $crypt_linktext) |
||
42 | { |
||
43 | // No new lines to avoid a JavaScript error! |
||
44 | $linktext = str_replace("\r", ' ', $linktext); |
||
45 | $linktext = str_replace("\n", ' ', $linktext); |
||
46 | |||
47 | if (!function_exists('alas_js_crypt')) |
||
48 | { |
||
49 | function alas_js_crypt($text) |
||
50 | { |
||
51 | $tmp = ''; |
||
52 | for ($i=0; $i<strlen($text); $i++) |
||
53 | { |
||
54 | $tmp .= 'document.write("&#'.ord(substr($text, $i, 1)).';");'; |
||
55 | } |
||
56 | return $tmp; |
||
57 | } |
||
58 | } |
||
59 | |||
60 | if (!function_exists('alas_js_write')) |
||
61 | { |
||
62 | function alas_js_write($text) |
||
63 | { |
||
64 | $text = str_replace('\\', '\\\\', $text); |
||
65 | $text = str_replace('"', '\"', $text); |
||
66 | $text = str_replace('/', '\/', $text); // W3C Validation </a> -> <\/a> |
||
67 | return 'document.write("'.$text.'");'; |
||
68 | } |
||
69 | } |
||
70 | |||
71 | $aus = ''; |
||
72 | if ($email != '') |
||
73 | { |
||
74 | $aus .= '<script language="JavaScript" type="text/javascript"><!--'."\n"; |
||
75 | $aus .= alas_js_write('<a href="'); |
||
76 | $aus .= alas_js_crypt('mailto:'.$email); |
||
77 | $aus .= alas_js_write('">'); |
||
78 | $aus .= $crypt_linktext ? alas_js_crypt($linktext) : alas_js_write($linktext); |
||
79 | $aus .= alas_js_write('</a>').'// --></script>'; |
||
80 | } |
||
81 | return $aus; |
||
82 | } |
||
83 | |||
84 | function getAddrSpec() { |
||
85 | // Ref: http://www.iamcal.com/publish/articles/php/parsing_email/ |
||
86 | |||
87 | $qtext = '[^\\x0d\\x22\\x5c\\x80-\\xff]'; |
||
88 | $dtext = '[^\\x0d\\x5b-\\x5d\\x80-\\xff]'; |
||
89 | $atom = '[^\\x00-\\x20\\x22\\x28\\x29\\x2c\\x2e\\x3a-\\x3c'. |
||
90 | '\\x3e\\x40\\x5b-\\x5d\\x7f-\\xff]+'; |
||
91 | $quoted_pair = '\\x5c[\\x00-\\x7f]'; |
||
92 | $domain_literal = "\\x5b($dtext|$quoted_pair)*\\x5d"; |
||
93 | $quoted_string = "\\x22($qtext|$quoted_pair)*\\x22"; |
||
94 | $domain_ref = $atom; |
||
95 | $sub_domain = "($domain_ref|$domain_literal)"; |
||
96 | $word = "($atom|$quoted_string)"; |
||
97 | $domain = "$sub_domain(\\x2e$sub_domain)*"; |
||
98 | $local_part = "$word(\\x2e$word)*"; |
||
99 | $addr_spec = "$local_part\\x40$domain"; |
||
100 | |||
101 | return $addr_spec; |
||
102 | } |
||
103 | |||
104 | function is_valid_email_address($email){ |
||
105 | $addr_spec = getAddrSpec(); |
||
106 | return preg_match("!^$addr_spec$!", $email) ? true : false; |
||
107 | } |
||
108 | |||
109 | function auto_secure_mail_addresses($content) { |
||
110 | $addr_spec = getAddrSpec(); |
||
111 | |||
112 | // Step 1: Parse links and make them secure |
||
113 | |||
114 | if (!function_exists('link_cb_1')) { |
||
115 | function link_cb_1($a) { |
||
116 | $mailaddr = $a[2]; |
||
117 | $linktext = $a[14]; // Letztes |
||
118 | |||
119 | return secure_email($mailaddr, $linktext, is_valid_email_address($linktext)); |
||
120 | } |
||
121 | } |
||
122 | |||
123 | $content = preg_replace_callback("/<a(.+?)mailto:($addr_spec)(.+?)>(.+?)<\/a>/sm", 'link_cb_1', $content); // TODO! Kann Greedy werden! |
||
124 | |||
125 | // Step 2: Find all further mail addresses, make then clickable and prevent spam bots |
||
126 | |||
127 | if (!function_exists('link_cb_2')) { |
||
128 | function link_cb_2($a) { |
||
129 | $mailaddr = $a[1]; // Letztes |
||
130 | |||
131 | if (CFG_MAKE_MAIL_ADDRESSES_CLICKABLE) { |
||
132 | return secure_email($mailaddr, $mailaddr, true); |
||
133 | } else { |
||
134 | return secure_email_triv($mailaddr); |
||
135 | } |
||
136 | } |
||
137 | } |
||
138 | |||
139 | $content = preg_replace_callback("/($addr_spec)/sm", 'link_cb_2', $content); |
||
140 | |||
141 | // Output |
||
142 | |||
143 | return $content; |
||
144 | } |
||
145 | |||
146 | $content = auto_secure_mail_addresses($content); |