PHP kötü formated HTML Ayrıştırma

3 Cevap php

In my code I convert some styled xls document to html using openoffice. I then parse the tables using xml_parser_create. The problem is that openoffice creates oldschool html with unclosed <BR> and <HR> tags, it doesn't create doctypes and don't quote attributes <TABLE WIDTH=4>.

Ben kapalı biliyorum php çözümleyecilerin gibi, ve xml formating hataları verim yok. Benim geçerli çözüm ben bunu ayrıştırmak önce dosya üzerinde bazı ifadelerin çalıştırmak için, ama bu güzel ne hızlı ne olduğunu.

Eğer hatalar bu tür hakkında umursamayan (umarım dahil) php-ayrıştırıcı, biliyor musunuz? Ya da belki de bir 'kırık' html düzeltmek için hızlı bir yoldur?

3 Cevap

Kırık HTML "düzeltmek" için bir çözüm kullanmak olabilir HTMLPurifier (quoting):

HTML Purifier is a standards-compliant HTML filter library written in PHP.
HTML Purifier will not only remove all malicious code (better known as XSS) with a thoroughly audited, secure yet permissive whitelist, it will also make sure your documents are standards compliant


An alternative idea might be to try loading your HTML with DOMDocument::loadHTML (quoting) :

The function parses the HTML contained in the string source . Unlike loading XML, HTML does not have to be well-formed to load.

Ve DOMDocument::loadHTMLFile bakın, bir dosyadan HTML yüklemeye çalışıyoruz.

SimpleHTML yoktur

Kırık HTML tamiri için kullanmak olabilir Tidy.

Bir alternatif olarak yerli kullanabilirsiniz XML Reader. Bir imleç belge akışı ileri gidiyorum ve yolda her düğüm noktasında durdurma gibi davranır, çünkü geçersiz XML belgeler üzerinde kırmam.

Bkz http://www.ibm.com/developerworks/library/x-pullparsingphp.html

Hala PHP 4 XML API kullanarak konum herhangi bir nedeni var mı?

PHP 5 XML API kullanarak uzak alabilirsiniz, iki olasılık vardır.

İlk olarak, yerleşik HTML çözümleyici deneyin. (O kötü biçimlendirilmiş HTML boğulmamak eğilimi) gerçekten çok iyi değil, ama işi olabilir. DomDocument :: loadHTML bakabilirsiniz.

İkinci seçenek - Eğer HTML5 çözümleyici şartnameye dayalı HTML çözümleyici deneyebilirsiniz:

http://code.google.com/p/html5lib/

Bu yerleşik PHP HTML çözümleyici daha iyi çalışma eğilimindedir. Bir DomDocument nesnesine HTML yükler.