Default Green Orange
Gemini_13's Blog
Блокнот полезных вещей
Home
    • Карта сайта
    • Обо мне
RSS

Кодирование и декодирование email. Аналог популярной шифровалки написанной на JS на PHP

Скрипты Add comments

Делая очередной парсер натолкнулся на ситуацию когда почтовик шифровали и приводили его в читабельный вид с помощью JavaScript. Всё бы ничего, но парсил cUrl-ом, а он JS не понимает. Впринципе, мне повезло. Я нашел в гугле исходники на хабре.
Да, на хабре были функции кодирования и декодирования на JS и была фунька кодирования на PHP, но мне то надо было обратное. В силу того, что знаний по JS кот наплакал, потерял много времени на понимание самого процесса декодирования. Как только понял суть работы каждой фуньки, тогда стало все ясно 🙂
Внимание! Для целостности смысла заметки будет копипаст.

Функции на JS

function encode(email, text, tpl) {
	var t = tpl.replace(/{e}/g, email);
	var a = t.replace(/{text}/g, text);

	t = "";
	for (i = 0; i < a.length; i++) {
		if (a.charCodeAt(i) <= 127) {
			t += (String.fromCharCode(Math.floor(a.charCodeAt(i) / 16) + 65))
			t += (String.fromCharCode(a.charCodeAt(i) % 16 + 65));
		} else {
			t += a.charAt(i);
		}
	}
	return t;
}
function decode(a) {
	var t = "";
	for (i = 0; i < a.length; i++) {
		if (a.charCodeAt(i) <= 127) {
			t += String.fromCharCode((a.charCodeAt(i) - 65) * 16 + (a.charCodeAt(++i) - 65))
		} else {
			t += a.charAt(i);
		}
	}
	return t;
}

Кодируем:

encode("name@domain.com", "Имя", "<a href=\"mailto:{e}\">{text}</a>");

Получаем:

DMGBCAGIHCGFGGDNCCGNGBGJGMHEGPDKGOGBGNGFEAGEGPGNGBGJGOCOGDGPGNCCDOИмяDMCPGBDO

Декодируем:

decode("DMGBCAGIHCGFGGDNCCGNGBGJGMHEGPDKGOGBGNGFEAGEGPGNGBGJGOCOGDGPGNCCDOИмяDMCPGBDO");

Получаем:

<a href="mailto:name@domain.com">Имя</a>

Функции на PHP

function encode_email($email, $text = null, $tpl = null)
{
	if (empty($email)) return false;
	if ($tpl === null) $tpl = "<A HREF=\"mailto:{e}\">{text}</A>";
	if ($text === null) $text = $email;
	$t = str_replace('{e}', $email, $tpl);
	$a = str_replace('{text}', $text, $t);

	$result = '';
	for($i = 0; $i < strlen($a); $i++) {
		if (ord($a[$i]) <= 127) {
			$result .= chr(floor(ord($a[$i]) / 16) + 65)
			. (string)chr(ord($a[$i])%16 + 65);
		} else {
			$result .= (string)$a[$i];
		}
	}
}
function decode_email($a)
{
	$result = '';
	for($i = 0; $i < strlen($a); $i++) {
		if (ord($a[$i]) <= 127) {
			$result .= chr((ord($a[$i]) - 65) * 16 + (ord($a[++$i]) - 65));
		} else {
			$result .= ord($a[$i]);
		}
	}
	return $result;
}

Кодируем:

print_r(encode_email('name@domain.com'));

Получаем:

DMGBCAGIHCGFGGDNCCGNGBGJGMHEGPDKGOGBGNGFEAGEGPGNGBGJGOCOGDGPGNCCDOИмяDMCPGBDO

Декодируем:

print_r(encode_email("DMGBCAGIHCGFGGDNCCGNGBGJGMHEGPDKGOGBGNGFEAGEGPGNGBGJGOCOGDGPGNCCDOИмяDMCPGBDO"));

Получаем:

<a href="mailto:name@domain.com">Имя</a>

17 августа, 2013  
Tags: decode, email, encode, javascript, js, php, декодирование, кодирование

Leave a Reply

  • Рубрики

    • FreeBSD (20)
    • Linux (46)
    • MySQL (11)
    • Windows (14)
    • Железо (3)
    • Мои моды к TorrentPier II (16)
    • Настройка сервера (49)
    • Разное (33)
    • Скрипты (30)
  • Свежие записи

    • Поля форм на Yii2: textInput(), passwordInput() и hiddenInput()
    • Поля форм на Yii2: CheckboxList()
    • SpeedTest датацентров Digital Ocean
    • Патчим Gearman на Debian
    • nginx + Apache 2.4 и REMOTE_ADDR (решение проблемы)
    • Создание и подключение swap-файла в Debian
    • Запуск PhpStorm 9 x64 на Windows
    • Рекурсивная замена прав доступа для папок и файлов в Linux
    • VirtualBox 5 + phpVirtualBox на Debian 8.2 (jessie)
    • Обработка сессий PHP с помощью Redis + phpredis на Debian 7.8
  • Ссылки

    • My GitHub
  • Архивы

    • Июнь 2016 (2)
    • Март 2016 (2)
    • Январь 2016 (3)
    • Ноябрь 2015 (2)
    • Август 2015 (1)
    • Февраль 2015 (1)
    • Январь 2015 (7)
    • Октябрь 2014 (1)
    • Июнь 2014 (1)
    • Май 2014 (1)
    • Апрель 2014 (7)
    • Февраль 2014 (9)
    • Январь 2014 (5)
    • Декабрь 2013 (7)
    • Ноябрь 2013 (1)
    • Октябрь 2013 (3)
    • Август 2013 (4)
    • Июль 2013 (4)
    • Июнь 2013 (3)
    • Апрель 2013 (2)
    • Март 2013 (2)
    • Февраль 2013 (6)
    • Январь 2013 (2)
    • Декабрь 2012 (1)
    • Ноябрь 2012 (2)
    • Октябрь 2012 (7)
    • Сентябрь 2012 (22)
Все права защищены © 2013 Gemini_13's Blog
G13.org.ua