Недавно,по заказу клиента, понадобилось скрыть 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’);?> |