• Модуль: mail
  • Путь к файлу: ~/bitrix/modules/mail/classes/general/mail.php
  • Класс: CAllMailUtil
  • Вызов: CAllMailUtil::uue_decode
static function uue_decode($str)
{
	preg_match("/begin [0-7]{3} .+?r?n(.+)?r?nend/i", $str, $reg);

	$str = $reg[1];
	$res = '';
	$str = preg_split("/r?n/", trim($str));
	$strlen = count($str);

	for ($i = 0; $i < $strlen; $i++)
	{
		$pos = 1;
		$d = 0;
		$len= (int)(((ord(mb_substr($str[$i], 0, 1)) -32) - ' ') & 077);

		while (($d + 3 <= $len) AND ($pos + 4 <= mb_strlen($str[$i])))
		{
			$c0 = (ord(mb_substr($str[$i], $pos, 1)) ^ 0x20);
			$c1 = (ord(mb_substr($str[$i], $pos + 1, 1)) ^ 0x20);
			$c2 = (ord(mb_substr($str[$i], $pos + 2, 1)) ^ 0x20);
			$c3 = (ord(mb_substr($str[$i], $pos + 3, 1)) ^ 0x20);
			$res .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4)).
					chr(((($c1 - ' ') & 077) << 4) | ((($c2 - ' ') & 077) >> 2)).
					chr(((($c2 - ' ') & 077) << 6) |  (($c3 - ' ') & 077));

			$pos += 4;
			$d += 3;
		}

		if (($d + 2 <= $len) && ($pos + 3 <= mb_strlen($str[$i])))
		{
			$c0 = (ord(mb_substr($str[$i], $pos, 1)) ^ 0x20);
			$c1 = (ord(mb_substr($str[$i], $pos + 1, 1)) ^ 0x20);
			$c2 = (ord(mb_substr($str[$i], $pos + 2, 1)) ^ 0x20);
			$res .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4)).
					chr(((($c1 - ' ') & 077) << 4) | ((($c2 - ' ') & 077) >> 2));

			$pos += 3;
			$d += 2;
		}

		if (($d + 1 <= $len) && ($pos + 2 <= mb_strlen($str[$i])))
		{
			$c0 = (ord(mb_substr($str[$i], $pos, 1)) ^ 0x20);
			$c1 = (ord(mb_substr($str[$i], $pos + 1, 1)) ^ 0x20);
			$res .= chr(((($c0 - ' ') & 077) << 2) | ((($c1 - ' ') & 077) >> 4));
		}
	}

	return $res;
}