Есть ли лучший способ, чем использовать Lynx для надежного преобразования HTML в обычный текст в PHP - PullRequest
2 голосов
/ 27 декабря 2011

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

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

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 28 декабря 2011

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

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

Схожий вопрос по SO:

Разбор HTML с HTML DOMDocument PHP

1 голос
/ 28 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...