53 static $_allowed_encoding = array(
'javascript' =>
true,
'javascript_charcode' =>
true,
'hex' =>
true,
'none' =>
true);
56 if (empty($params[
'address'])) {
57 trigger_error(
"mailto: missing 'address' parameter",E_USER_WARNING);
60 $address = $params[
'address'];
67 $replace = array(
'@',
',');
68 $mail_parms = array();
69 foreach ($params as $var => $value) {
75 $mail_parms[] = $var .
'=' . str_replace(
$search, $replace, rawurlencode($value));
80 $mail_parms[] = $var .
'=' . rawurlencode($value);
92 $address .=
'?' . join(
'&', $mail_parms);
95 $encode = (empty($params[
'encode'])) ?
'none' : $params[
'encode'];
96 if (!isset($_allowed_encoding[$encode])) {
97 trigger_error(
"mailto: 'encode' parameter must be none, javascript, javascript_charcode or hex", E_USER_WARNING);
101 if ($encode ==
'javascript') {
102 $string =
'document.write(\'<a href="mailto:' . $address .
'" ' . $extra .
'>' . $text .
'</a>\');';
105 for ($x = 0, $_length = strlen($string); $x < $_length; $x++) {
106 $js_encode .=
'%' . bin2hex($string[$x]);
109 return '<script>eval(unescape(\'' . $js_encode .
'\'))</script>
';
110 } elseif ($encode == 'javascript_charcode
') {
111 $string = '<a href=
"mailto:' . $address . '" ' . $extra . '>
' . $text . '</a>
';
113 for($x = 0, $y = strlen($string); $x < $y; $x++) {
114 $ord[] = ord($string[$x]);
118 . "{document.write(String.fromCharCode("
125 } elseif ($encode == 'hex
') {
126 preg_match('!^(.*)(\?.*)$!
', $address, $match);
127 if (!empty($match[2])) {
128 trigger_error("mailto: hex encoding does not work with extra attributes. Try javascript.",E_USER_WARNING);
131 $address_encode = '';
132 for ($x = 0, $_length = strlen($address); $x < $_length; $x++) {
133 if (preg_match('!\w!
' . Smarty::$_UTF8_MODIFIER, $address[$x])) {
134 $address_encode .= '%
' . bin2hex($address[$x]);
136 $address_encode .= $address[$x];
140 for ($x = 0, $_length = strlen($text); $x < $_length; $x++) {
141 $text_encode .= '&#x
' . bin2hex($text[$x]) . ';
';
144 $mailto = "mailto:";
145 return '<a href=
"' . $mailto . $address_encode . '" ' . $extra . '>
' . $text_encode . '</a>
';
148 return '<a href=
"mailto:' . $address . '" ' . $extra . '>
' . $text . '</a>
';
smarty_function_mailto($params, $template)
Smarty {mailto} function plugin.