Есть ли лучший способ надежного преобразования HTML в простой текст в PHP с помощью Lynx?

Я хочу преобразовать HTML-файл с макетом на основе таблицы в обычный текст, чтобы отправить составное электронное письмо через PHP.

Я пробовал несколько различных предварительно созданных классов / функций, которые я нашел в SO, но ни один из них, похоже, не дает достойных результатов, что, как я считаю, связано с макетом на основе таблиц.

Я не хочу использовать свой собственный класс для удаления HTML и форматирования результатов, поскольку я уверен, что есть проблемы с краями, которые я не буду учитывать или не смогу протестировать, пока не столкнусь с ними в производстве.

Лучшее решение, которое я придумал, это:

  1. Создать временный HTML-файл
  2. Используйте что-то вроде shell_exec ("/ путь / к / lynx -dump временный.html"); для создания текстовой версии электронного письма
  3. Используйте регулярное выражение, чтобы избавиться от любых оставшихся нежелательных тегов

Это работает нормально, но меня немного беспокоит, что это не оптимальный способ создания приличного составного письма. Кто-нибудь знает лучший способ?

Чтобы уточнить, я уже безуспешно пробовал следующее:


person Aaron    schedule 27.12.2011    source источник
comment
Вместо создания временного файла .txt вы можете использовать параметр -dump, чтобы вернуть текст обратно в PHP. Используя переключатель -stdin (только для UNIX), вы также можете передавать HTML через STDIN в lynx. С -verbose вы сможете подавить теги изображений. Я обнаружил, что lynx всегда очень хорош для создания текстовых представлений источников HTML.   -  person hakre    schedule 27.12.2011
comment
Ах, спасибо, '-verbose' экономит мне время!   -  person Aaron    schedule 27.12.2011
comment
Вы читали ответы на тот же вопрос в stackoverflow.com/questions/1884550/   -  person macjohn    schedule 27.12.2011
comment
@macjohn: Спасибо, что раскопали, интересно. Но я думаю, что Райсо уже попробовала это в соответствии с вопросом. Но, пожалуйста, оставьте комментарий, чтобы оба вопроса были связаны.   -  person hakre    schedule 27.12.2011
comment
@macjohn Да, я пробовал предлагаемые решения там.   -  person Aaron    schedule 27.12.2011
comment
Рискуя спросить очевидное, что насчет strip_tags (), htmlspecialchars () или htmlentities ()?   -  person GordonM    schedule 27.12.2011
comment
@GordonM Спасибо за ввод, однако, когда указанные выше помощники / Lynx преобразуют HTML в открытый текст, они пытаются сохранить исходный макет и теги привязки, что идеально подходит для почтовых клиентов, которые не могут анализировать HTML, тогда как strip_tags () и т.д. просто оставят текст позади.   -  person Aaron    schedule 27.12.2011
comment
С какими проблемами у вас были, например, html2text?   -  person Alan H.    schedule 10.04.2012


Ответы (2)


Lynx - не лучшее решение, как я искренне верю :) Кроме того, я сам использовал html2text, и он отлично работает и лучше, чем lynx ... в любом случае, если вы предпочитаете регулярное выражение, это будет намного тяжелее, чем использование системной оболочки ( shell_exec, system, exec, popen), так как вам нужно preg_replace все ненужные теги, а в php regex смертельно медленный. Так что я думаю, если это на Linux-машине, лучше перейти на html2text ..

person Mr. BeatMasta    schedule 28.12.2011
comment
Спасибо за ответ. Я бы использовал регулярное выражение только для очистки нескольких тегов, добавляемых Lynx, а не всего документа. Удаление HTML с помощью Regex означало бы запуск моей собственной функции очистки, что потенциально могло оставить меня открытым для множества краевых ошибок. Кроме того, html2text плохо работает с макетами на основе таблиц. - person Aaron; 28.12.2011
comment
не пробовал html2text с макетом таблицы, но я думаю, что вряд ли найдется какой-нибудь софт, который мог бы справиться с этим нормально :)) - person Mr. BeatMasta; 30.12.2011

В этом вам должен помочь PHP DomDocument. Вы можете перемещаться по дереву DOM и вырезать соответствующий контент по своему усмотрению.

http://php.net/manual/en/class.domdocument.php

Связанный вопрос о SO:

Анализировать HTML с помощью HTML DOMDocument PHP

person DhruvPathak    schedule 28.12.2011