Advertisement
pushrbx

Untitled

Jul 11th, 2014
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 1.77 KB | None | 0 0
  1. function safe_mailto($email, $title = '', $attributes = '')
  2. {
  3.     $title = (string) $title;
  4.  
  5.     if ($title == "")
  6.     {
  7.         $title = $email;
  8.     }
  9.  
  10.     for ($i = 0; $i < 16; $i++)
  11.     {
  12.         $x[] = substr('<a href="mailto:', $i, 1);
  13.     }
  14.  
  15.     for ($i = 0; $i < strlen($email); $i++)
  16.     {
  17.         $x[] = "|".ord(substr($email, $i, 1));
  18.     }
  19.  
  20.     $x[] = '"';
  21.  
  22.     if ($attributes != '')
  23.     {
  24.         if (is_array($attributes))
  25.         {
  26.             foreach ($attributes as $key => $val)
  27.             {
  28.                 $x[] =  ' '.$key.'="';
  29.                 for ($i = 0; $i < strlen($val); $i++)
  30.                 {
  31.                     $x[] = "|".ord(substr($val, $i, 1));
  32.                 }
  33.                 $x[] = '"';
  34.             }
  35.         }
  36.         else
  37.         {
  38.             for ($i = 0; $i < strlen($attributes); $i++)
  39.             {
  40.                 $x[] = substr($attributes, $i, 1);
  41.             }
  42.         }
  43.     }
  44.  
  45.     $x[] = '>';
  46.  
  47.     $temp = array();
  48.     for ($i = 0; $i < strlen($title); $i++)
  49.     {
  50.         $ordinal = ord($title[$i]);
  51.  
  52.         if ($ordinal < 128)
  53.         {
  54.             $x[] = "|".$ordinal;
  55.         }
  56.         else
  57.         {
  58.             if (count($temp) == 0)
  59.             {
  60.                 $count = ($ordinal < 224) ? 2 : 3;
  61.             }
  62.  
  63.             $temp[] = $ordinal;
  64.             if (count($temp) == $count)
  65.             {
  66.                 $number = ($count == 3) ? (($temp['0'] % 16) * 4096) + (($temp['1'] % 64) * 64) + ($temp['2'] % 64) : (($temp['0'] % 32) * 64) + ($temp['1'] % 64);
  67.                 $x[] = "|".$number;
  68.                 $count = 1;
  69.                 $temp = array();
  70.             }
  71.         }
  72.     }
  73.  
  74.     $x[] = '<'; $x[] = '/'; $x[] = 'a'; $x[] = '>';
  75.  
  76.     $x = array_reverse($x);
  77.     ob_start();
  78.  
  79. ?><script type="text/javascript">
  80. //<![CDATA[
  81. var l=new Array();
  82. <?php
  83. $i = 0;
  84. foreach ($x as $val){ ?>l[<?php echo $i++; ?>]='<?php echo $val; ?>';<?php } ?>
  85.  
  86. for (var i = l.length-1; i >= 0; i=i-1){
  87. if (l[i].substring(0, 1) == '|') document.write("&#"+unescape(l[i].substring(1))+";");
  88. else document.write(unescape(l[i]));}
  89. //]]>
  90. </script><?php
  91.  
  92.     $buffer = ob_get_contents();
  93.     ob_end_clean();
  94.     return $buffer;
  95. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement