所以我有一个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结构?
答案 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);
}
或者,您可以将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) {
...
}