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?
Eine Lösung, um kaputtes HTML zu "reparieren", könnte sein HTMLPurifier (Zitat) :
zu verwendenHTML 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
.
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 Ссылка
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.