PHP SAX парсер для HTML? - PullRequest
       10

PHP SAX парсер для HTML?

3 голосов
/ 30 мая 2010

Мне нужен анализатор HTML SAX (не DOM!) Для PHP, способный обрабатывать даже недопустимый HTML-код. Причина, по которой мне это нужно, состоит в том, чтобы фильтровать введенный пользователем HTML (удалить все атрибуты и теги кроме разрешенных) и обрезать содержимое HTML до указанной длины.

Есть идеи?

Ответы [ 4 ]

4 голосов
/ 30 мая 2010

SAX был создан для обработки допустимого XML и сбоя при неверной разметке. Для обработки недействительной разметки HTML требуется больше состояния, чем обычно для SAX-анализаторов.

Я не знаю ни одного SAX-подобного парсера для HTML. Лучше всего использовать этот метод для прохождения HTML-кода через tidy, а затем использовать синтаксический анализатор XML, но это может помешать вашей цели использовать SAX-анализатор в первую очередь.

1 голос
/ 28 июля 2013

Подводя итог в два этапа:

  1. Используйте Tidy для преобразования "свободного HTML" в "хороший XHTML".
  2. Используйте XML Parser для анализа XHTML как XML с помощью SAX API .

Сначала используйте Tidy (!), Чтобы преобразовать «свободный HTML» в XHTML (или когда вы не можете доверять своему «предполагаемому XHTML»). См. Метод cleanRepair . Это требует больше времени, но работает с большими файлами (!) ... Установите несколько минут в качестве максимального времени выполнения , если оно слишком большое.

Другим вариантом (для работы с большими файлами) является кэширование ваших файлов XHTML после проверки или преобразования в XHTML. См. Метод Tidy repairfile .

С "доверенным XHTML" использовать SAX ... Как использовать SAX с PHP?

Анализ XML с помощью стандартного SAX API , который в PHP реализован с помощью LibXML (см. LibXML2 на xmlsoft.org ) и его интерфейс - синтаксический анализатор PHP , который близок к стандартному API SAX .

Другой способ использовать «SAX LibXML2 » с другим интерфейсом ( PHP-итератор вместо традиционного интерфейса SAX) - это использовать XMLReader, См. это объяснение о "XMLReader use SAX" .


Да, термины «SAX» или «SAX API» не выражены в руководстве по PHP (!!). Смотрите это старое, но хорошее введение .

1 голос
/ 06 августа 2010

Попробуйте использовать HTML SAX Parser

0 голосов
/ 16 апреля 2012

Я могу предложить пакет с грушей здесь: http://pear.php.net/package/XML_HTMLSax/redirected

...