2011-03-29 120 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