2012-05-22 1 views
2

Я должен отправить заголовки, и я хочу, чтобы извлечь различные данные: от, предмет, дата, и т.д ..Расщепление почты заголовки с помощью preg_match

$mail1 = 'From: <[email protected]> 
To: [email protected] 
Subject: Califique nuestro servicio 
Date: Sat, 19 May 2012 10:39:04 -0400 
Message-ID: <[email protected]> 
MIME-Version: 1.0'; 

$mail2 = 'Date: Fri, 21 Oct 2011 13:42:46 +0000 (GMT) 
From: "Decolar.com" <[email protected]> 
To: [email protected] 
Message-ID: <[email protected]> 
Subject: =?UTF-8?Q?Decolar.com_-_Solicita=C3=A7=C3=A3o_?= 
=?UTF-8?Q?de_compra_-_N=C3=BAmero:10603789?= 
MIME-Version: 1.0'; 


preg_match("/Subject: (.)*(Date|Message-ID|From|To|MIME-Version):/s",$mail1,$m);   
print_r($m);  

Я использую код, указанный выше для получения только предмет , но результат не является ожидаемым.

Для mail1 я получаю:

Array 
(
    [0] => Subject: Califique nuestro servicio 
Date: Sat, 19 May 2012 10:39:04 -0400 
Message-ID: <[email protected]> 
MIME-Version: 
    [1] => 

    [2] => MIME-Version 
) 

Для Mail2 я получаю:

Array 
(
    [0] => Subject: =?UTF-8?Q?Decolar.com_-_Solicita=C3=A7=C3=A3o_?= 
=?UTF-8?Q?de_compra_-_N=C3=BAmero:10603789?= 
MIME-Version: 
    [1] => 

    [2] => MIME-Version 
) 

I оба случая, при условии пусто.

ответ

4

я бы, вероятно, сделать что-то вроде:

function normalize_array($arr) { 
    for ($res = array(), $i = 0; $i < count($arr); $i+=2) { 
     $key = strtr($arr[$i],array(': '=>'','-'=>'_')); 
     $res[$key] = $arr[$i+1]; 
    } 
    return $res; 
} 

$mailData = normalize_array(preg_split('~([\w-]+:)~',$mail1,-1,PREG_SPLIT_DELIM_CAPTURE|PREG_SPLIT_NO_EMPTY)); 
print_r($mailData); 

, который возвратит:

 
Array 
(
    [From] => <[email protected]> 

    [To] => [email protected] 

    [Subject] => Califique nuestro servicio 

    [Date] => Sat, 19 May 2012 10:39:04 -0400 

    [Message_ID] => <[email protected]> 

    [MIME_Version] => 1.0 
) 
+0

Это не то, что я искал, но это даже лучшее решение! Большое спасибо. – capsula

+0

Добро пожаловать. Вы можете захотеть удалить новые строки в поле темы (так как они не могут существовать), добавив '' \ r \ n '=>' ',' \ n '=>' ',' \ r '=>' ''в массив замен. – inhan

+0

Да, я не был уверен, что они могут существовать, я думаю, что они только что из-за обертывания, когда я сохранил письмо. Во всяком случае, это хорошая уборка. – capsula

1

Regex модель должна быть:

/Subject: (.*)\b/ 
+0

На самом деле я хотел точно соответствовать текст «Дата »,« Сообщение », .., никому. Спасибо в любом случае за помощь, я узнал что-то новое;) – capsula

 Смежные вопросы

  • Нет связанных вопросов^_^