PHP/XML, HTML und XHTML
Wohlgeformte Dokuemnte sind im World Wide Web eher selten anzutreffen. Die XML-Bibliothek "libxml2" verfügt deshalb über einige Funktionen, die XML und HTML verbinden können. Dafür stellt die Klasse "DomDocument" folgende Methoden zur Verfügung.
Methode | Beschreibung |
---|---|
LoadHTML | Lädt ein HTML-Dokument aus einer Zeichenkette. |
LoadHTMLFile | Lädt ein HTML-Dokument aus einer Datei. Hier sind alle üblichen Wrapper erlaubt, sodass auch Dokumente von anderen Servern per FTP oder HTTP geladen werden können. |
SaveHTML | Speichert das XML-Dokument im nicht wohlgeformten, aber HTML 4-Standard kompatiblen Format als Zeichenkette. |
SaveHTMLFile | Speichert das XML-Dokument im nicht wohlgeformten, aber HTML 4-Standard kompatiblen Format als Datei. Hier sind mit Einschränkungen einige Wrapper erlaubt, sodass auch Dokumente auf anderen Server (z. B. mit FTP) gespeichert werden können. |
Das folgende Beispiel lädt eine nicht wohlgeformte (also typische) HTML-Datei und gibt sie in drei Fassungen aus:
- Unverändert
- Als standardkonforme HTML-Datei
- Als wohlgeformtes XML-Datei, also als XHTML
Das Skript durchsucht das aktuelle Verzeichnis nach Dateien mit der Dateinamenserweiterung ".htm*". Wird auf eine der als Link angezeigten Fundstellen geklickt, so wird die Datei in drei Fassungen angezeigt. Die Übergabe des Dateinamens erfolgt als GET-Parameter. Die Ausgabe nutzt die Funktion "htmlspecialchars", um den Quleltext sichtbar werden zu lassen. Andernfalls würde der Webbrowser die Seite interpretieren. Mit der Funktion "nl2br" bleiben zudem die Zeilenumbrüche erhalten.
<html>
<head>
<title>HTML laden</title>
</head>
<body>
<?php
$self = $_SERVER['PHP_SELF'];
$files = glob("{*.htm*}", GLOB_BRACE);
if (is_array($files))
{
foreach ($files as $filename)
{
printf('<a href="%2$s?file=%1$s">%1$s</a><br />', $filename, $self);
}
}
if (isset($_GET['file']))
{
$html = new DomDocument();
$html->loadHTMLFile($_GET['file']);
$file = file_get_contents($_GET['file']);
echo "<hr>";
echo nl2br(htmlspecialchars($file));
echo "<hr>";
echo nl2br(htmlspecialchars($html->saveHTML()));
echo "<hr>";
echo nl2br(htmlspecialchars($html->saveXML()));
}
?>
</body>
</html>
|
<html> <head> <title>HTML laden</title> </head> <body> testdatei.htm<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <meta name="author" content="Hermann Meier">
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> </head> </html> <?xml version="1.0" standalone="yes"?> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" ""> <h1>Test</h1>
 </body> </html> |
Das "Reinigen" von schlecht geschriebenem HTML ist allerdings nicht die Hauptaufgabe des HTML-Imports und -Exports. Dafür sind die Tidy-Erweiterungen in PHP5 besser geeignet, die mehr Steuerungsmöglichkeiten zulassen.Es gibt nämlich uneindeutige Fälle, vor allem im Zusammenhang mit den Tags "<br>" und "<p>", die sich nicht immer vollautomatisch umsetzen lassen.