Скрыть email адрес с помощью JavaScript

Недавно,по заказу клиента, понадобилось скрыть email адрес. Стандартная функция WordPress antispambot(); не подходит т.к. заказчику визуально не видно, что адрес скрыт , объяснять же, что там все закодировано в исходном коде юникодм я уже устал так как это не первый случай и честно говоря защита эта очень слабая. Вообщем решил вот один раз сесть и решить проблему, но как оказалось все не так просто. Ничего подходящего не нашел. Хотелось иметь простую в использовании функцию так, чтобы не надо было подключить лишние JS файлы с функцией декодирования, ну и чтобы код был зашифрован хоть как нибудь, не читался взглядом хотя бы. После долгих поисков ух, качестве кодирования на стороне php нашел функцию fullescape(), для декодирования в JavaScript подойдет стандартная функция decodeURIComponent().
Привожу полный код функций описание ниже:

function fullescape($in) { $out = »; for ($i=0;$i<strlen($in);$i++) { $hex = dechex(ord($in[$i])); if ($hex==») $out = $out.urlencode($in[$i]); else $out = $out .’%’.((strlen($hex)==1) ? (‘0’.strtoupper($hex)):(strtoupper($hex))); } $out = str_replace(‘+’,’%20′,$out); $out = str_replace(‘_’,’%5F’,$out); $out = str_replace(‘.’,’%2E’,$out); $out = str_replace(‘-‘,’%2D’,$out); return $out; } function hideHTML($html, $elemetn=’div’, $class = ‘hidehtml’, $id=»){ if(!$html) return »; if($id) $id = » e.setAttribute(‘id’, ‘$id’);»; $html = addslashes($html); $script_id = ‘h’.rand(10000,99999); $eval_code = «d = document; s = d.getElementById(‘$script_id’); e = d.createElement(‘$elemetn’); e.className = ‘$class’; $id e.innerHTML = ‘$html’; s.parentNode.insertBefore(e, s); s.parentNode.removeChild(s); «; $eval_code = fullescape($eval_code); $script_code = «<script id=$script_id>eval(decodeURIComponent(‘$eval_code’));</script>»; echo $script_code; } function hide_under_button($html, $botton_text, $elemetn=’span’, $class = ‘hidehtml’, $id=»){ if(!$html) return »; if($id) $id = » e.setAttribute(‘id’, ‘$id’);»; $html = addslashes($html); $button_id = ‘b’.rand(10000,99999); $eval_code = «d = document; b = d.getElementById(‘$button_id’); e = d.createElement(‘$elemetn’); e.className = ‘$class’; $id e.innerHTML = ‘$html’; b.parentNode.insertBefore(e, b); b.parentNode.removeChild(b);»; $eval_code = fullescape($eval_code); $button_code = «<button id=$button_id onclick=»JavaScript:eval(decodeURIComponent(‘$eval_code’));»>$botton_text</button>n»; echo $button_code; }

123456789101112131415161718192021222324252627282930313233343536373839 function fullescape($in){      $out = »;      for ($i=0;$i<strlen($in);$i++)      {        $hex = dechex(ord($in[$i]));        if ($hex==»)           $out = $out.urlencode($in[$i]);        else           $out = $out .‘%’.((strlen($hex)==1) ? (‘0’.strtoupper($hex)):(strtoupper($hex)));      }      $out = str_replace(‘+’,‘%20’,$out);      $out = str_replace(‘_’,‘%5F’,$out);      $out = str_replace(‘.’,‘%2E’,$out);      $out = str_replace(‘-‘,‘%2D’,$out);      return $out;} function hideHTML($html, $elemetn=‘div’, $class = ‘hidehtml’, $id=»){     if(!$html) return »;     if($id) $id = » e.setAttribute(‘id’, ‘$id’);»;     $html = addslashes($html);     $script_id = ‘h’.rand(10000,99999);     $eval_code = «d = document; s = d.getElementById(‘$script_id’); e = d.createElement(‘$elemetn’); e.className = ‘$class’; $id e.innerHTML = ‘$html’; s.parentNode.insertBefore(e, s); s.parentNode.removeChild(s); «;     $eval_code = fullescape($eval_code);     $script_code = «<script id=$script_id>eval(decodeURIComponent(‘$eval_code’));</script>«;     echo  $script_code;} function hide_under_button($html, $botton_text, $elemetn=‘span’, $class = ‘hidehtml’, $id=»){    if(!$html) return »;    if($id) $id = » e.setAttribute(‘id’, ‘$id’);»;    $html = addslashes($html);    $button_id = ‘b’.rand(10000,99999);    $eval_code = «d = document; b = d.getElementById(‘$button_id’); e = d.createElement(‘$elemetn’); e.className = ‘$class’; $id e.innerHTML = ‘$html’; b.parentNode.insertBefore(e, b); b.parentNode.removeChild(b);»;    $eval_code = fullescape($eval_code);    $button_code = «<button id=$button_id onclick=»JavaScript:eval(decodeURIComponent(‘$eval_code’));»>$botton_text</button>n»;    echo  $button_code;}

Функция hideHTML($html, $elemetn=’div’, $class = ‘hidehtml’, $id=”) прячет html код в JavaScript. Спрятанный текст декодируется как только страница загрузится то есть мгновенно.
Параметры:

  • $html html код или просто текст который надо спрятать
  • $elemetn html элемент в который будет обернут скрытый код, по умолчанию div
  • $class css класс для для элемента обертки, по умолчанию hidehtml
  • $id атрибут id для элемента обертки, по умолчанию отсутствует

пример спрячем почту:

<? hideHTML(‘<a href=»mailto:user_name@serever_name.com»>моя почта</a>’, ‘span’, ‘hide_span’, ‘sp1283’);?>

12 <? hideHTML(‘<a href=»mailto:user_name@serever_name.com»>моя почта</a>’,             ‘span’, ‘hide_span’, ‘sp1283’);?>

Функция hide_under_button($html, $botton_text, $elemetn=’div’, $class = ‘hidehtml’, $id=”) Прячет html код в теле кнопки button. Декодирование происходить по нажатию кнопки.
Параметры:

  • $html html код или просто текст который надо спрятать
  • $botton_text текст кнопки до нажатия
  • $elemetn html элемент в который будет обернут скрытый код, по умолчанию div
  • $class css класс для для элемента обертки, по умолчанию hidehtml
  • $id атрибут id для элемента обертки, по умолчанию отсутствует

пример кнопки:

<? hide_under_button(‘я спрятал свою почту <a href=»mailto:user_name@serever_name.com»>user_name@serever_name.com</a>’, ‘чтобы увидеть нажми меня!’, ‘h3′,’butt_hide’, ‘lakjsdlkajs’);?>

1234 <? hide_under_button(‘я спрятал свою почту  <a href=»mailto:user_name@serever_name.com»>user_name@serever_name.com</a>’, ‘чтобы увидеть нажми меня!’, ‘h3’,‘butt_hide’, ‘lakjsdlkajs’);?>