В моем коде я преобразовываю, некоторые разработали xls документ HTML с помощью openoffice. Я затем анализирую использование таблиц xml_parser_create
. Проблема состоит в том, что openoffice создает oldschool HTML с открытым <BR>
и <HR>
теги, это не создает doctypes и не заключает атрибуты в кавычки <TABLE WIDTH=4>
.
php синтаксические анализаторы, которые я знаю прочь, не любят это и приводят к xml форматирование ошибок. Мое текущее решение состоит в том, чтобы выполнить некоторый regexes по файлу, прежде чем я проанализирую его, но это не хорошо и не быстро.
Вы знаете (надо надеяться, включенный) php-синтаксический-анализатор, который не заботится об этих видах ошибок? Или возможно быстрый способ зафиксировать 'поврежденный' HTML?
Решение "исправить" неработающий HTML может заключаться в используйте HTMLPurifier (цитата) :
HTML Purifier - это соответствующая стандартам библиотека фильтров HTML, написанная на PHP.
HTML Purifier не только удалите весь вредоносный код (более известный как XSS) с помощью тщательно проверенного, безопасного, но разрешающего белого списка; он также гарантирует, что ваши документы соответствуют стандартам
В качестве альтернативы можно попробовать загрузить HTML-код с помощью DOMDocument :: loadHTML
(цитата) :
Функция анализирует HTML-код, содержащийся в в строковый источник. В отличие от загрузки XML, HTML не должен быть правильно сформированным для загрузки.
А если вы пытаетесь загрузить HTML из файла, см. DOMDocument :: loadHTMLFile
.
Существует SimpleHTML
Для восстановления поврежденного HTML вы можете использовать Tidy .
В качестве альтернативы вы можете использовать собственный XML Reader . Поскольку он действует как курсор, движущийся вперед по потоку документов и останавливающийся на каждом узле в пути, он не будет работать с недопустимыми документами XML.
См. http://www.ibm.com/developerworks/library/x-pullparsingphp.html
Любой конкретный причина, по которой вы все еще используете PHP 4 XML API?
Если вы можете обойтись без использования PHP 5 XML API, есть две возможности.
Сначала попробуйте встроенный анализатор HTML. Это действительно не очень хорошо (имеет тенденцию подавляться плохо отформатированным HTML), но это может помочь. Взгляните на DomDocument :: LoadHTML.
Второй вариант - вы можете попробовать парсер HTML на основе спецификации парсера HTML5:
http://code.google.com/p/html5lib/
Обычно это работает лучше, чем встроенный PHP Парсер HTML. Он загружает HTML в объект DomDocument.