Меню Закрыть

Php html to text

Содержание

Я использую TinyMCE, чтобы разрешить минимальное форматирование текста на моем сайте. Из HTML, который был создан, я хотел бы преобразовать его в обычный текст для электронной почты. Я использую класс под названием html2text , но он действительно не поддерживает поддержку UTF-8, среди прочего. Тем не менее, мне кажется, что он сопоставляет определенные теги HTML с форматированием обычного текста – например, помещает подчеркивания вокруг текста, который ранее имел теги в HTML.

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

Используйте html2text (пример HTML для текста ), лицензированный в рамках публичной лицензии Eclipse . Он использует методы DOM PHP для загрузки из HTML, а затем выполняет итерацию по полученному DOM для извлечения простого текста. Применение:

Хотя он неполный, он открыт с открытым исходным кодом и приветствуется.

Проблемы с другими сценариями конвертации:

  • Поскольку html2text (GPL) не совместим с EPL.
  • Ссылка lkessler (атрибуция) несовместима с большинством лицензий с открытым исходным кодом.

Преобразование из HTML в текст с использованием DOMDocument является жизнеспособным решением. Рассмотрим HTML2Text, для которого требуется PHP5:

Что касается UTF-8, запись на странице «howto» гласит:

Собственная поддержка PHP для unicode довольно плохая, и она не всегда корректно обрабатывает utf-8. Хотя сценарий html2text использует безопасные для Unicode методы (без использования модуля mbstring), он не всегда может справиться с собственной обработкой кодировок PHP. PHP действительно не понимает юникод или кодировки, такие как utf-8, и использует базовую кодировку системы, которая, как правило, является одним из семейств ISO-8859. В результате, то, что может выглядеть вам как действительный символ в вашем текстовом редакторе, как в utf-8, так и в однобайтном, вполне может быть неверно истолковано PHP. Поэтому, даже если вы считаете, что кормили допустимого символа в html2text, вы, возможно, не будете.

Автор предлагает несколько подходов к решению этого вопроса и утверждает, что версия 2 HTML2Text (с использованием DOMDocument) поддерживает UTF-8.

Обратите внимание на ограничения для коммерческого использования.

Есть надежная функция strip_tags . Это не очень, хотя. Это будет только санировать. Вы могли бы объединить его с заменой строки, чтобы получить ваши причудливые подчеркивания.

Вы можете использовать lynx с параметрами -stdin и -dump для достижения этого:

Вы можете проверить эту функцию

вот еще одно решение:

Я не нашел ни одного из существующих решений – простые HTML-письма для простых текстовых файлов.

Читайте также:  Samsung ssd 860 evo программа

Я открыл этот репозиторий, надеюсь, что это поможет кому-то. Лицензия MIT, кстати 🙂

Markdownify преобразует HTML в Markdown, систему форматирования текста, используемую на этом самом сайте.

Markdownify работал замечательно для меня! о чем нужно упомянуть: он отлично поддерживает utf-8, что было основной причиной, по которой я искал другое решение, чем html2text (что упоминалось ранее в этом потоке).

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

Вместо этого я нашел этот полезный скрипт, чтобы избежать путаницы, назовем его html2text_roundcube , доступным под GPL:

На самом деле это обновленная версия уже упомянутого скрипта – http://www.chuggnutt.com/html2text.php – обновлена ​​по почте RoundCube.

Почему html2text_roundcube оказался лучше других:

Скрипт http://www.chuggnutt.com/html2text.php не работает из коробки для случаев со специальными кодами / именами HTML (например, ä ) или неспаренными кавычками (например,

У скрипта https://github.com/soundasleep/html2text не было возможности скрывать или группировать ссылки в конце текста, делая обычную HTML-страницу раздутой со ссылками в текстовом формате; настройка кода для специального рассмотрения того, как делается преобразование, не так прямо, как простое редактирование массива в html2text_roundcube .

Я только что нашел функцию PHP «strip_tags ()» и ее работу в моем случае.

Я попытался преобразовать следующий HTML:

После применения функции strip_tags () у меня есть следующий вывод:

$text = "string 1
string 2

  • string 3
  • string 4

вывод
строка 1
строка 2
строка 3
строка 4
строка 5

I use TinyMCE to allow minimal formatting of text within my site. From the HTML that’s produced, I’d like to convert it to plain text for e-mail. I’ve been using a class called html2text, but it’s really lacking in UTF-8 support, among other things. I do, however, like that it maps certain HTML tags to plain text formatting — like putting underscores around text that previously had tags in the HTML.

Does anyone use a similar approach to converting HTML to plain text in PHP? And if so: Do you recommend any third-party classes that I can use? Or how do you best tackle this issue?

15 Answers 15

Use html2text (example HTML to text), licensed under the Eclipse Public License. It uses PHP’s DOM methods to load from HTML, and then iterates over the resulting DOM to extract plain text. Usage:

Although incomplete, it is open source and contributions are welcome.

Issues with other conversion scripts:

  • Since html2text (GPL) is not EPL-compatible.
  • lkessler’s link (attribution) is incompatible with most open source licenses.
Читайте также:  Hp pavilion dv7 4050er

here is another solution:

For other variations of sanitization functions, see:

Converting from HTML to text using a DOMDocument is a viable solution. Consider HTML2Text, which requires PHP5:

Regarding UTF-8, the write-up on the "howto" page states:

PHP’s own support for unicode is quite poor, and it does not always handle utf-8 correctly. Although the html2text script uses unicode-safe methods (without needing the mbstring module), it cannot always cope with PHP’s own handling of encodings. PHP does not really understand unicode or encodings like utf-8, and uses the base encoding of the system, which tends to be one of the ISO-8859 family. As a result, what may look to you like a valid character in your text editor, in either utf-8 or single-byte, may well be misinterpreted by PHP. So even though you think you are feeding a valid character into html2text, you may well not be.

The author provides several approaches to solving this and states that version 2 of HTML2Text (using DOMDocument) has UTF-8 support.

(PHP 4 >= 4.3.0, PHP 5, PHP 7)

html_entity_decode — Преобразует все HTML-сущности в соответствующие символы

Описание

html_entity_decode() является противоположностью функции htmlentities() . Она преобразует все HTML-сущности в строке string в соответствующие символы.

Если быть точнее, то эта функция преобразует все сущности (в том числе все числовые сущности), которые а) обязательно верны для выбранного типа документа — то есть, для XML, эта функция не преобразует именованные сущности, которые могут быть определены в каком-нибудь DTD — и б) их символы находятся в кодировке соответвующей с выбранной кодировкой и разрешены в выбранном типе документа. Все другие сущности остаются без изменений. набор, связанный с выбранной кодировкой и разрешается в выбранном тип документа. Все другие субъекты, которые оставили как есть.

Список параметров

Битовая маска, состоящая из одного или более флагов, которые указывают как обращаться с кавычками и какой тип документа использовать. По умолчанию маска принимает значение ENT_COMPAT | ENT_HTML401.

Константы flags

Имя константы Описание
ENT_COMPAT Преобразуются двойные кавычки, одиночные остаются без изменений.
ENT_QUOTES Преобразуются и двойные, и одиночные кавычки.
ENT_NOQUOTES И двойные, и одиночные кавычки остаются без изменений.
ENT_HTML401 Обрабатывать код как HTML 4.01.
ENT_XML1 Обрабатывать код как XML 1.
ENT_XHTML Обрабатывать код как XHTML.
ENT_HTML5 Обрабатывать код как HTML 5.

Необязательный аргумент определяющий кодировку, используемую при конвертации симоволов.

Читайте также:  Как вызвать цифровую клавиатуру

Если не указан, то значением по умолчанию для encoding зависит от используемой версии PHP. В PHP 5.6 и старше, для значения по умолчанию используется конфигурационная опция default_charset. В PHP 5.4 и 5.5 используется UTF-8 по умолчанию. Более ранние версии PHP используют ISO-8859-1.

Хотя этот аргумент является технически необязательным, настоятельно рекомендуется указать правильное значение для вашего кода, если вы используете PHP 5.5 или выше, или если ваша опция конфигурации default_charset может быть задана неверно для входных данных.

Поддерживаются следующие кодировки:

Поддерживаемые кодировки

Кодировка Псевдонимы Описание
ISO-8859-1 ISO8859-1 Западно-европейская Latin-1.
ISO-8859-5 ISO8859-5 Редко используемая кириллическая кодировка (Latin/Cyrillic).
ISO-8859-15 ISO8859-15 Западно-европейская Latin-9. Добавляет знак евро, французские и финские буквы к кодировке Latin-1(ISO-8859-1).
UTF-8 8-битная Unicode, совместимая с ASCII.
cp866 ibm866, 866 Кириллическая кодировка, применяемая в DOS.
cp1251 Windows-1251, win-1251, 1251 Кириллическая кодировка, применяемая в Windows.
cp1252 Windows-1252, 1252 Западно-европейская кодировка, применяемая в Windows.
KOI8-R koi8-ru, koi8r Русская кодировка.
BIG5 950 Традиционный китайский, применяется в основном на Тайване.
GB2312 936 Упрощенный китайский, стандартная национальная кодировка.
BIG5-HKSCS Расширенная Big5, применяемая в Гонг-Конге.
Shift_JIS SJIS, SJIS-win, cp932, 932 Японская кодировка.
EUC-JP EUCJP, eucJP-win Японская кодировка.
MacRoman Кодировка, используемая в Mac OS.
» Пустая строка активирует режим определения кодировки из файла скрипта (Zend multibyte), default_charset и текущей локали (см. nl_langinfo() и setlocale() ), в указанном порядке. Не рекомендуется к использованию.

Замечание: Остальные кодировки не поддерживаются, вместо них будет применена кодировка по умолчанию и сгенерировано предупреждение.

Возвращаемые значения

Возвращает раскодированную строку.

Список изменений

Версия Описание
5.6.0 Значение по умолчанию для параметра encoding было изменено на значение конфигурационной опции default_charset.
5.4.0 Кодировка по умолчанию сменилась с ISO-8859-1 на UTF-8.
5.4.0 Были добавлены константы ENT_HTML401 , ENT_XML1 , ENT_XHTML и ENT_HTML5 .

Примеры

Пример #1 Декодирование HTML-сущностей

= "I’ll "walk" the dog now" ;

$a = htmlentities ( $orig );

$b = html_entity_decode ( $a );

echo $a ; // I’ll "walk" the dog now

echo $b ; // I’ll "walk" the dog now
?>

Примечания

Может показаться странным, что результатом вызова trim(html_entity_decode(‘ ‘)); не является пустая строка. Причина том, что ‘ ‘ преобразуется не в символ с ASCII-кодом 32 (который удаляется функцией trim() ),а в символ с ASCII-кодом 160 (0xa0) в принимаемой по умолчанию кодировке ISO-8859-1.

Смотрите также

  • htmlentities() — Преобразует все возможные символы в соответствующие HTML-сущности
  • htmlspecialchars() — Преобразует специальные символы в HTML-сущности
  • get_html_translation_table() — Возвращает таблицу преобразований, используемую функциями htmlspecialchars и htmlentities
  • urldecode() — Декодирование URL-кодированной строки

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.