#php
#php
Вопрос:
вот мой пример текста
------=_Part_564200_22135560.1319730112436
Content-Type: text/plain; charset=utf-8; name=text_0.txt
Content-Transfer-Encoding: 7bit
Content-ID: <314>
Content-Location: text_0.txt
Content-Disposition: inline
I hate u
------=_Part_564200_22135560.1319730112436
Content-Type: image/gif; name=dottedline350.gif
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=dottedline350.gif
Content-ID: <dottedline350.gif>
Мне нужно уметь извлекать «Я ненавижу тебя».
Я знаю, что могу использовать explode для удаления последней части после сообщения, выполнив
$body_content = garbled crap above;
$message_short = explode("------=_",$body_content);
echo $message_short;
но мне нужно удалить первую часть вместе с последней частью.
Итак, описанная выше функция разнесения делает то, что мне нужно, чтобы удалить конец, теперь мне нужно что-то, что говорит
НАЙДИТЕ ‘Content-Disposition: inline’ и удалите вместе со всем, что есть, прежде чем НАЙТИ ‘——=_’ и удалите вместе со всем, что после этого останется = $message_short
echo $message_short;
будет выглядеть так
Я ненавижу тебя
Любая помощь будет признательна.
Спасибо @Marcus
Это код, который у меня сейчас есть, и он прекрасно работает.
$body_content2 = imap_qprint(imap_body($gminbox, $email_number));
$body_content2 = strip_tags ($body_content2);
$tmobile_body = explode("------=_", $body_content2);
$tmobile_body_short = explode("Content-Disposition: inline", $tmobile_body[1]);
$tmobile_body_complete1 = trim($tmobile_body_short[1]);
$tmobile_body_complete2 = explode("T-Mobile", $tmobile_body_complete1);
$tmobile_body_complete3 = trim($tmobile_body_complete2[1]);
Комментарии:
1. Я тоже тебя ненавижу. Но вы можете использовать для этого регулярное выражение и
preg_match
вместо fiddlyexplode
. Но, может быть, у вас есть полный большой двоичный объект? Тогда было бы проще с PEAR mimeDecode .2. вы можете попробовать strstr для двойной новой строки.
Ответ №1:
Если вы хотите сделать это с помощью explode и explode в «Content-Disposition: inline», вот как вы можете это сделать:
$message_short = explode("------=_", $body_content);
$message_shorter = explode("Content-Disposition: inline", $message_short[1]);
$content = trim($message_shorter[1]);
// $content == I hate you
Обратите внимание, что для этого требуется, чтобы последняя строка была Content-Disposition: inline
Если вы хотите решить проблему с помощью регулярных выражений и использовать двойной разрыв строки в качестве разделителя, вот для вас codesnippet:
$pattern = '/(?<=------=_Part_564200_22135560.1319730112436)(?:.*?sss)(.*?)(?=------=_Part_564200_22135560.1319730112436)/is';
preg_match_all($pattern, $body_content, $matches);
echo($matches[1][0]);
Вывод:
I hate you
Вот ссылка на codepad с образцом текста.
Комментарии:
1. Спасибо, Маркус, именно то, что я искал.
2. спасибо, исправил мой основной пост, чтобы показать код, который я использовал, работал отлично.