Получить только текст письма в формате HTML на PHP - PullRequest
2 голосов
/ 19 сентября 2011

Итак, у меня есть PHP-скрипт, который принимает отправленные по электронной почте письма, добавляет к ним нижний колонтитул и передает их.

Но если кто-то отправляет электронное письмо уже в формате HTML, он просто вставляет всю электронную почту HTMLв тело нового HTML-документа.Мне нужен скрипт, который (если письмо уже в HTML) уберет теги html, head и body, оставляя оригинальное письмо.

Т.е. если кто-то отправил письмо

<html><body>This is my awesome input email which is <strong>already</strong> in HTML</body></html>

Мой скрипт анализирует его как

<html><body><html><body>This is my awesome input email which is <strong>already</strong> in HTML</body></html></body></html>

Как я могу заставить его удалить структуру HTML, если она существует?

1 Ответ

2 голосов
/ 19 сентября 2011

Я не думаю, что можно определить, присутствует ли элемент html при работе с DOMDocument и HTML, потому что loadHTML() добавит свой собственный элемент html, если его нет.

Приведенный ниже код просто всегда возвращает сериализованный HTML-код элемента body.

$dom = new DOMDocument;

$dom->loadHTML($html);

$body = '';

foreach($dom->getElementsByTagName('body')->item(0)->childNodes as $child) {
    $body .= $dom->saveHTML($child);
}

CodePad .

В качестве альтернативы, вы можете рассматривать HTML как XML изатем обнаружите его, но без documentElement у вас могут возникнуть проблемы.Я решил это, добавив манекен documentElement, хотя это немного неуклюже (я бы, наверное, сам придерживался приведенного выше кода).

// Need a documentElement so wrap it with some generic garbage.
$html = '<garbage>' . $html . '</garbage>';

$dom = new DOMDocument;

$dom->loadXML($html);

if ($dom->getElementsByTagName('html')->length) {
   ...
}

CodePad .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...