Suchen
Aktuell
- Aktuell
- Kommentare
- TagCloud
- Windows Phone 7: Silverlight und XNA
- 1267769400 1267769400 - Keine Kommentare
- Empfehlung: Microsoft Arc Keyboard
- 1266747660 1266747660 - 2 Kommentare
- C#: Outlook like Pop-up Alert
- 1264008720 1264008720 - Keine Kommentare
- Windows Mobile 7 - Verschiedene Versionen geplant
- 1264007340 1264007340 - Keine Kommentare
- Windows Media Center: Pixelfehler am rechten Rand
- 1260208800 1260208800 - Keine Kommentare
- Das Outlook Fenster kann nicht geöffnet werden #2
- 1259409180 1259409180 - 13 Kommentare
- Bis jetzt sind noch keine Kommentare geschrieben worden
Randnotiz
W3C
- Keine Kommentare
HTML-Dokumente mit tidy untersuchen
Die DOM-Struktur eines HTML-Dokuments lässt sich auf einfache Art und Weise mittels tidy (http://de3.php.net/manual/de/book.tidy.php) untersuchen. Leider ist diese Klasse in PHP noch nicht richtig implementiert und die Dokumentation weist noch sehr viele Lücken auf.
HTML-Dokument laden
tidy kann direkt Dateien oder aber auch Strings laden. Dies erfolg über die Methoden parseFile() und parseString()
// Laden einer Datei
$tidy = new tidy();
$tidy->parseFile('file.html');
// Laden eines Strings
$string = '<html><head><title>Test</title><body>Inhalt</body></html>';
$tidy = new tidy();
$tidy->parseString($string);
Analysieren und Reparieren der Struktur
tidy kann die Struktur einer HTML-Datei analysieren und auch reparieren. Die Methode diagnose() anaylisiert die Struktur und gibt bei Erfolg true, ansonsten false zurück. Mittels tidy_get_error_buffer(<TidyObject>) kann dann ein genauer Analyse-Bericht angezeigt werden.
$tidy = new tidy();
$tidy->parseFile('file.html');
$tidy->diagnose();
echo tidy_get_error_buffer($tidy);
Das obrige Beispiel erzeugt eine Ausgabe, die wie folgt aussehen könnte:
line 5 column 1 - Warning: <p> isn't allowed in <head> elements
line 5 column 1 - Warning: inserting missing 'title' element
Info: Doctype given is "-//W3C//DTD XHTML 1.0 Strict//EN"
Info: Document content looks like XHTML 1.0 Strict
2 warnings, 0 errors were found!
Sollte die Struktur nun beschädigt sein, z. B. fehldende <html>-Tags, Doctype, etc. kann diese mittels clean_repair() Repariert werden.
$tidy->cleanRepair();
Leider kann man dieser Methode keine weiteren Parameter mit übergeben und so wird auch die Zeichenkodierung oft fälschlicherweise überschreiben. Daher sollte bereits beim Aufruf der parseFile()/parseString() Methoden die Zeichenkodierung mit übergeben werden.
$tidy = new tidy;
$tidy->parseString('<p>Test</p>', array('indent' => true, 'output-xhtml' => true, 'wrap' => 200), 'utf8');
$tidy->cleanRepair();
Das Beispiel erzeugt folgende Ausgabe:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 3.2//EN">
<html>
<head>
<title></title>
</head>
<body>
<p>Test</p>
</body>
</html>
<head> und <body>
Möchte man nur den <head> bzw. <body>-Bereich eines HTML-Dokuments, so erhält man diese über die Methoden head() und body();
$head = $tidy->head();
$body = $tidy->body();
Diese Methoden geben ein tidyNode Objekt zurück, welche beim <head> bzw. <body>-Tag starten. Im child Attribut befinden sich dann der Inhalt als tinyNode Objekte. Diese kann man ganz einfach per foreach auslesen.
foreach($head->child as $child) {
echo $child->value;
}
Die Attribute eines tidyNode Objektes sind:
- value - the value of the node (e.g. the html text)
- name - the name of the tag (e.g. html, a, etc..)
- type - the type of the node (one of the constants above, e.g. TIDY_NODETYPE_PHP)
- line* - the line where the node starts
- column* - the column where the node starts
- proprietary* - TRUE if the node refers to a proprietary tag
- id - the ID of the tag (one of the constants above, e.g. TIDY_TAG_FRAME)
- attribute - an array with the attributes of the current node, or NULL if there aren't any
- child - an array with the child tidyNodes, or NULL if there aren't an
Wie bereits oben erwähnt ist die tidy-Funktion in PHP noch nicht wirklich vollständig implementiert und einig wichtige und interessante Methoden, wie z. B. get_nodes() funktionieren aktuell noch nicht. Ebenso ist die Dokumentation bei weitem noch nicht vollständig. Jedoch sollte man diese Klasse umbedingt weiter im Auge behalten.
- Links:
- Tidy Dokumentation
Kommentare
- Bis jetzt sind noch keine Kommentare geschrieben worden


