只获取PHP中HTML电子邮件的正文

时间:2011-09-19 00:54:34

标签: php regex email

所以我有一个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 个答案:

答案 0 :(得分:2)

在使用DOMDocument和HTML时,我认为无法检测html元素是否存在,因为loadHTML()将添加自己的html元素(如果不存在)。

下面的代码将始终返回body元素的序列化HTML。

$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