Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: X технологии > Как сделать из невалидного HTML-документа валидный


Автор: barcelona 1.8.2008, 11:56
Здравствуйте!
Мне необходимо обработать HTML-документ как XML. При этом этот HTML-документ до невозможности не валидный. Вопрос: существует ли готовая библиотека или скрипт на PHP, который бы из невалидных HTML-документов делал валидные?
Заранее спасибо!

Автор: gta4kv 1.8.2008, 12:39
 smile 
Смешная шутка. Нет.
 smile 

Автор: skyboy 1.8.2008, 13:18
Цитата(barcelona @  1.8.2008,  10:56 Найти цитируемый пост)
который бы из невалидных HTML-документов делал валидные?

в общем случае это невозможно.
к примеру,
Код

<span><p>fff</span></p>

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

Автор: barcelona 1.8.2008, 14:06
Вот ч-о-о-орт! Этот документ поступает ко мне из источника, который не подправишь....

Автор: bars80080 1.8.2008, 14:10
значит парсить его не как xml, а обычными способами

Автор: skyboy 1.8.2008, 15:00
barcelona, "невалидности" носят постоянный характер? пример почему не приводишь?

Автор: barcelona 1.8.2008, 15:07
bars80080, а какие это обычные способы?
Я откопал расширение php5 - tidy называется, оно не может подойти для чистки исходного HTML-документа?
skyboy, документ кривой насквозь. Незакрытые теги, атрибуты тегов без кавычек - и вообще полный набор определения "невалидность".

Автор: skyboy 1.8.2008, 15:13
Цитата(barcelona @  1.8.2008,  14:07 Найти цитируемый пост)
атрибуты тегов без кавычек

при желании можно вылечить регулярками. разве что, если в значении пробел, то автоматизировать распознание "это не отдельное значение, а к тому, предыдущему относится" не выйдет.
Цитата(barcelona @  1.8.2008,  14:07 Найти цитируемый пост)
Незакрытые теги

ну, одиночные вроде <input> или <image> ещё можно закрыть теми же регулярками. но вот где ставить закрывающий тег для <p>?

Автор: bars80080 1.8.2008, 15:41
обычные способы, это отыскивать нужную инфо по вехам, типа strstr(), preg_match(), парсить теми же регулярками и explode()

геморно, и никак иначе. либо сумеешь заставить источник валидно отдавать, либо придётся работать эту кучу
я к примеру свой источник одной инфо не сумел заставить, теперь в ручную

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)