определить обычный текст или html

В моем приложении я обрабатываю почтовые тексты с помощью PHP. Для некоторых почтовых клиентов, таких как sina.com, отправляются неверные заголовки. Например, они отправляют почту в формате HTML, но отправляют заголовок Content-Type как text/plain.

Теперь для этих писем мое приложение рассматривает HTML как текст. В PHP, как я могу определить, содержит ли текст html-текст или нет?


person Sabya    schedule 29.03.2011    source источник
comment
используйте strip_tag и отправьте его как текст, или вы можете сравнить строку перед и после этой функции   -  person diEcho    schedule 29.03.2011
comment
С философской точки зрения ваше приложение не должно пытаться исправить явно неверный заголовок MIME. Если письмо помечено text/plain, то вы должны рассматривать его как text/plain, не text/html. Обнюхивание типов контента — одна из многих вещей, которые сделали IE таким кошмаром безопасности, и вы не хотите идти по тому же пути.   -  person Charles    schedule 29.03.2011
comment
Не точное решение, но вы можете использовать strip_tags, чтобы весь контент был только текстовым. Другим вариантом было бы использовать регулярное выражение для любых тегов html, но я недостаточно разбираюсь в регулярных выражениях, чтобы написать это. :)   -  person Mike Soule    schedule 29.03.2011


Ответы (2)


Да, вы можете использовать strip_tags() и сравнить отфильтрованное тело письма с исходным, чтобы увидеть, есть ли какие-либо различия, но не забывайте, что в обычном тексте вы можете иметь теги HTML как обычный текст, и я думаю, что strip_tags() также удалит эти теги.

person Wh1T3h4Ck5    schedule 29.03.2011
comment
Извините @ Wh1T3h4Ck5, не прочитал весь ваш ответ. Удалил мой комментарий. - person Knarf; 29.03.2011

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

Если это совпадение, то это HTML.

person Knarf    schedule 29.03.2011
comment
Почему минус? Большинство электронных писем оборачивают себя html-тегами, если они HTML. - person Knarf; 29.03.2011
comment
Я с вами в этом. Но, чтобы, возможно, сохранить ненужный вызов preg_match(), я бы предложил сначала проверить с strip_tags(), как предложил Уайтхэкс. Затем, только если строки отличаются, используйте preg_match, чтобы убедиться, что тело действительно HTML. - person flu; 22.07.2015