Parsing von schlecht formatiertem HTML in PHP

8

In meinem Code konvertiere ich ein formatiertes xls-Dokument mit openoffice in html. Ich analysiere dann die Tabellen mit xml_parser_create . Das Problem ist, dass OpenOffice oldschool html mit nicht geschlossenen <BR> und <HR> Tags erstellt, keine Doctypes erstellt und keine Attribute <TABLE WIDTH=4> zitiert.

Die PHP-Parser, die ich kenne, mögen das nicht und verursachen XML-Formatierungsfehler. Meine derzeitige Lösung besteht darin, einige Regexes über die Datei auszuführen, bevor ich sie analysiere, aber das ist weder schön noch schnell.

Kennst du einen (hoffentlich eingeschlossenen) PHP-Parser, der sich nicht um solche Fehler kümmert? Oder vielleicht ein schneller Weg, um einen 'kaputten' HTML zu reparieren?

    
Thomas Ahle 28.02.2010, 15:37
quelle

4 Antworten

8

Eine Lösung, um kaputtes HTML zu "reparieren", könnte sein HTMLPurifier (Zitat) :

zu verwenden
  

HTML Purifier ist standardkonform   HTML-Filterbibliothek in PHP geschrieben.   Der HTML-Purifier wird nicht nur entfernt   aller bösartiger Code (besser bekannt als   XSS) mit einem gründlich geprüften,   Sicher, aber freizügige Whitelist, es    stellt außerdem sicher, dass Ihre Dokumente den Standards entsprechen


Eine alternative Idee könnte sein, den HTML-Code mit DOMDocument::loadHTML zu laden (Zitat). :

  

Die Funktion analysiert den enthaltenen HTML-Code   in der String-Quelle. Im Gegensatz zum Laden   XML, HTML muss nicht sein   wohlgeformt zu laden.

Und wenn Sie versuchen, HTML aus einer Datei zu laden, finden Sie DOMDocument::loadHTMLFile .

    
Pascal MARTIN 28.02.2010, 15:40
quelle
4

Es gibt SimpleHTML

Um defekten HTML-Code zu reparieren, können Sie Tidy verwenden.

Alternativ können Sie den nativen XML Reader verwenden. Da er als ein Cursor fungiert, der im Dokumentstrom vorwärts geht und an jedem Knoten auf dem Weg stoppt, wird er bei ungültigen XML-Dokumenten nicht beschädigt.

Siehe Ссылка

    
Gordon 28.02.2010 15:40
quelle
1

Aus irgendeinem Grund verwenden Sie immer noch die PHP 4 XML API?

Wenn Sie mit der Verwendung der XML-API von PHP 5 fortfahren können, gibt es zwei Möglichkeiten.

Probieren Sie zuerst den integrierten HTML-Parser. Es ist wirklich nicht sehr gut (es neigt dazu, schlecht formatierten HTML zu ersticken), aber es könnte den Trick tun. Werfen Sie einen Blick auf DomDocument :: LoadHTML.

Zweite Option - Sie könnten den HTML-Parser basierend auf der HTML5-Parser-Spezifikation ausprobieren:

Ссылка

Dies funktioniert tendenziell besser als der integrierte PHP-HTML-Parser. Es lädt den HTML-Code in ein DomDocument-Objekt.

    
BlackAura 28.02.2010 16:27
quelle
0

Eine Lösung ist die Verwendung von DOMDocument.

Beispiel:

%Vor%

Vorteil: nativ in PHP enthalten, im Gegensatz zu PHP Tidy.

    
Jerry 11.01.2017 10:34
quelle

Tags und Links