$headers = 'Subject: =?koi8-r?Q?=f5=d7=c5=c4=cf=cd=cc=c5=ce=c9=c5=20=cf=20=ce=cf=d7=cf=cd=20=cf=d4'.
'=d7=c5=d4=c5=20=ce=c1=20=d3=cf=cf=c2=dd=c5=ce=c9=c5=20=5c=e1=ce=c1=cc=c9=da=20=d7='.
'c8=cf=c4=d1=dd=c5=ca=20=d0=cf=de=d4=d9=3f=5c?=
header2: text
';
class mail_headers
{
var $text = '';
var $preparsed = array();
var $fields = array();
function mail_headers() {}
function loadText($text) {$this->text = strval($text);}
function preparse()
{
preg_match_all('~^(.*?):\s*(.*)\r?\n?~m',$this->text,$matches,PREG_SET_ORDER);
foreach ($matches as $m) {$this->preparsed[$m[1]] = $m[2];}
return TRUE;
}
function parse_fields()
{
foreach ($this->preparsed as $f=>$v)
{
if (preg_match('~^Subject$~i',$f))
{
if (preg_match('~=\?(.*)\?=~',$v,$m))
{
$e = explode('?',$m[1]);
if (isset($e[1]))
{
if (strtolower($e[1]) == 'b') {$e[1] = base64_decode($e[2]); unset($e[2]);}
elseif (strtolower($e[1]) == 'q') {$e[1] = urldecode(str_replace('=','%',$e[2])); unset($e[2]);}
$v = iconv($e[0],'windows-1251',$e[1]);
}
}
}
$this->fields[$f] = $v;
}
}
}
$mail_headers = new mail_headers();
$mail_headers->loadText($headers);
$mail_headers->preparse();
$mail_headers->parse_fields();
var_dump($mail_headers->fields);
/*
array(2) {
["Subject"]=>
string(64) "Уведомление о новом ответе на сообщение \Анализ входящей почты?\"
["header2"]=>
string(5) "text
"
}
*/