Парсинг плохо отформатированного HTML в PHP

В моем коде я преобразовываю, некоторые разработали xls документ HTML с помощью openoffice. Я затем анализирую использование таблиц xml_parser_create. Проблема состоит в том, что openoffice создает oldschool HTML с открытым <BR> и <HR> теги, это не создает doctypes и не заключает атрибуты в кавычки <TABLE WIDTH=4>.

php синтаксические анализаторы, которые я знаю прочь, не любят это и приводят к xml форматирование ошибок. Мое текущее решение состоит в том, чтобы выполнить некоторый regexes по файлу, прежде чем я проанализирую его, но это не хорошо и не быстро.

Вы знаете (надо надеяться, включенный) php-синтаксический-анализатор, который не заботится об этих видах ошибок? Или возможно быстрый способ зафиксировать 'поврежденный' HTML?

9
задан Cœur 4 April 2017 в 10:41
поделиться

3 ответа

Решение "исправить" неработающий HTML может заключаться в используйте HTMLPurifier (цитата) :

HTML Purifier - это соответствующая стандартам библиотека фильтров HTML, написанная на PHP.
HTML Purifier не только удалите весь вредоносный код (более известный как XSS) с помощью тщательно проверенного, безопасного, но разрешающего белого списка; он также гарантирует, что ваши документы соответствуют стандартам


В качестве альтернативы можно попробовать загрузить HTML-код с помощью DOMDocument :: loadHTML (цитата) :

Функция анализирует HTML-код, содержащийся в в строковый источник. В отличие от загрузки XML, HTML не должен быть правильно сформированным для загрузки.

А если вы пытаетесь загрузить HTML из файла, см. DOMDocument :: loadHTMLFile .

8
ответ дан 4 December 2019 в 15:15
поделиться

Существует SimpleHTML

Для восстановления поврежденного HTML вы можете использовать Tidy .

В качестве альтернативы вы можете использовать собственный XML Reader . Поскольку он действует как курсор, движущийся вперед по потоку документов и останавливающийся на каждом узле в пути, он не будет работать с недопустимыми документами XML.

См. http://www.ibm.com/developerworks/library/x-pullparsingphp.html

4
ответ дан 4 December 2019 в 15:15
поделиться

Любой конкретный причина, по которой вы все еще используете PHP 4 XML API?

Если вы можете обойтись без использования PHP 5 XML API, есть две возможности.

Сначала попробуйте встроенный анализатор HTML. Это действительно не очень хорошо (имеет тенденцию подавляться плохо отформатированным HTML), но это может помочь. Взгляните на DomDocument :: LoadHTML.

Второй вариант - вы можете попробовать парсер HTML на основе спецификации парсера HTML5:

http://code.google.com/p/html5lib/

Обычно это работает лучше, чем встроенный PHP Парсер HTML. Он загружает HTML в объект DomDocument.

1
ответ дан 4 December 2019 в 15:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: