- Модуль: 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;
}