【问题标题】:detect plain text or html检测纯文本或html
【发布时间】:2011-07-25 00:57:00
【问题描述】:

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

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

【问题讨论】:

  • 使用strip_tag并将其作为文本发送,或者您可以比较此函数前后的字符串
  • 从哲学的角度来看,您的应用程序不应该尝试更正明显不正确的 MIME 标头。如果邮件标记为text/plain,则应将其视为text/plain不是 text/html。内容类型嗅探是使 IE 成为安全噩梦的众多因素之一,您不想走同样的路。
  • 不是一个精确的解决方案,但您可以使用 strip_tags 将所有内容仅作为文本。另一种选择是对任何 html 标签使用正则表达式,但我对正则表达式的熟练程度不足以编写它。 :)

标签: php email text-processing


【解决方案1】:

是的,您可以使用strip_tags() 并将过滤后的邮件正文与原始邮件进行比较,看看是否有任何差异,但不要忘记,在纯文本中,您可能将 HTML 标记作为普通文本,我认为 @987654322 @ 也会删除这些标签。

【讨论】:

  • 抱歉@Wh1T3h4Ck5,没有阅读您的全部答案。删除了我的评论。
【解决方案2】:
preg_match('/\<html\>(.*)\<\/html\>/', $emailbody)

如果匹配,则为 HTML。

【讨论】:

  • 为什么投反对票?如果它们是 HTML,大多数电子邮件都会将自身包装在 html-tags 中。
  • 我支持你。但为了可能节省对preg_match() 的不必要呼叫,我建议首先与strip_tags() 联系,就像 Whitehacks 建议的那样。然后,仅当字符串不同时,才使用preg_match 确保正文是真正的 HTML。
猜你喜欢
  • 2021-12-30
  • 1970-01-01
  • 2012-06-07
  • 2011-04-13
  • 1970-01-01
  • 2014-04-21
  • 2010-11-03
  • 1970-01-01
  • 2011-03-11
相关资源
最近更新 更多