2011-03-29 96 views
2

在我的应用程序中,我正在使用PHP处理邮件文本。对于某些邮件客户端(如sina.com)发送错误标题。例如,他们正在发送HTML邮件,但将头部Content-Type作为text/plain发送。检测纯文本或html

现在,对于这些邮件,我的应用程序正在将HTML视为文本。在PHP中,如何检测文本是否包含html文本?

+0

使用[strip_tag](http://php.net/manual/en/function.strip-tags.php)并将其作为文本发送,或者您可以比较此功能前后的字符串 – diEcho 2011-03-29 06:44:37

+5

从哲学角度查看,你的应用程序**不应该**尝试纠正*明显不正确的* MIME头。如果邮件标记为“text/plain”,那么您应该将其视为“text/plain”,* not *“text/html”。内容类型嗅探是使IE成为安全噩梦的许多因素之一,并且你不想走上同一条路。 – Charles 2011-03-29 06:45:56

+0

不是一个确切的解决方案,但是您可以使用strip_tags来仅制作所有内容文本。另一种选择是使用任何html标签的正则表达式,但我不够熟练地用正则表达式来编写它。 :) – 2011-03-29 06:46:54

回答

3

是的,你可以使用strip_tags()和比较过滤后的邮件正文与原始邮件正文有什么区别,但不要忘记,纯文本中可能有HTML标签作为普通文本,我认为strip_tags()将删除这些标签也是。

+0

对不起@ Wh1T3h4Ck5,没有读你的整个答案。删除我的评论。 – Knarf 2011-03-29 07:35:49

1
preg_match('/\<html\>(.*)\<\/html\>/', $emailbody) 

如果这个匹配,那么它是HTML。

+1

为什么downvote?如果他们是HTML,大多数电子邮件都会将自身封装在HTML标签中。 – Knarf 2011-03-29 07:26:31

+0

我和你在一起。但为了可能保存一个不需要的调用'preg_match()'我建议首先检查'strip_tags()'像Whitehacks建议的那样。然后,只有字符串不同时,使用'preg_match'来确保body是真正的HTML。 – flu 2015-07-22 09:57:15