Wer kennt das nicht? Da hat man wieder ein total verphriggeltes Script (vielleicht schon vor Jahren) installiert, obwohl alle davor gewarnt haben. Und heute, heute wissen es eh alle besser. Und der Output ist konstant grottenschlecht. Damit kann man keinen Quellcode versierten XHTML fixierten menschen beeindrucken, da ist man gleich durch mit seiner Seite. Muss ich jetzt die ganze olle PHP App umschreiben nur um ein bischen im Netz rumpimpen zu können? Und das bei dem ganzen Spaghetticode der mit HTML Tags nur so durchtränkt ist – das verschiebe ich doch lieber auf nächstes Jahr…

Ein kurzer Klick beim W3C und deine Kumpel enttarnen dich als Uber-Noob…

…aber damit kannst du dir die den Titel Webdeveloper wieder ans Türschild hängen.
Alles neuschreiben? Von Seite der Ausgabe her wahrscheinlich nicht, den es gibt die Tidy Funktionen. Die eine oder andere Webdesignerin kennt vielleicht HTML Tidy noch aus alten Zeiten womit man damals auf dem Desktop seinen HTML Quellcode verifizieren konnte. Mittlerweile gibt es eine ganze libtidy die eben genau in der PECL Extension zum Einsatz kommt und ist von vielen Sprachen, Plattformen und Tools aus nutzbar – Open Source sei dank.
Um zu verstehen was den so toll an Tidy für die kaputte Ausgabe eines veralterten PHP Scriptes ist (tz tz, die Sprache entwickelt sich einfach zu schnell für ihre Entwickler), muss man wissen was Tidy macht: Es überprüft und repariert HTML Dokumente. Und genau dies kann man sich in PHP durch die Tidy Extension sehr gut zu Nutze machen: Die Ausgabe wird einfach repariert bevor sie zum Browser wandert. Warum selber aufräumen wenn es doch Tidy gibt (die Usergruppe wird mir diese Aussage noch monatelang vorhalten).
Das ganze Tidy wird einfach mit dem Outputbuffering von PHP (die offizielle Übersetzung lautet: Funktionen zur Ausgabesteuerung) kombiniert und ist somit schnell eingebaut. Entweder wird das schon verwendet oder ein einfacher Aufruf von ob_start() fängt die automatische Ausgabe von PHP ab. Am Ende des Programms muss lediglich der Ausgabespeicher ausgelesen, per tidy_repair_string() ge-tidy-ed werden und einfach an den Browser ausgegeben werden. Hier ein Beispiel:
<?php ob_start(); ?> ... <?php $buffer = ob_get_clean(); $tidy = tidy_repair_string($buffer); echo $tidy; ?>
Mit diesen wenigen Zeilen räumt Tiny schon mit seinen Standard-Einstellungen den HTML Quellcode auf. Und dem wachsamen Zuschauer fällt gleich auf, dass damit das Dokument noch kein Valides XHTML sein muss. Auch stört hier eventuell der Zeilenumbruch. Aber für einen ersten Versuch verrichtet Tidy schon solide seine Arbeit. Das wäre aber wirklich zu einfach gewesen, deswegen gleich mal in die Vollen: Tiny bietet eine Fülle an Einstellungsmöglichkeiten, die mittels einem Array in PHP angegeben werden können. Aus dieser Liste habe ich mich mal direkt bedient:
- clean = true – Räum mal ein bisschen auf Baby, ist ja das totale Chaos hier!
- hide-comments = true – Die Kommentare kann man sich sparen (vorsicht bei Conditional Comments für den IE)
- output-xhtml = true – Kleider machen Leute; XHTML wird angezogen
- indent-spaces = 2 – Lieber kleiner, das spart auch wieder einige Zeichen; Tidy macht kein Einrücken mit Tabs
- tab-size = 2 – Beim Einlesen wird ein Tab als 2 Leerzeichen behandelt
- wrap = 0 – Ich will keinen Zeilenumbruch haben (Default 68)
Und schon war der Output nochmal um ein paar Bytes kleiner, hier diese Einstellungen im Code-Beispiel:
/* Tiny sagen, was es machen soll */ $config["clean"] = true; $config["hide-comments"] = true; $config["output-xhtml"] = true; $config["indent-spaces"] = 2; $config["tab-size"] = 2; $config["wrap"] = 0; $buffer = ob_get_clean(); $tidy = tidy_repair_string($buffer, $config); echo $tidy;
Tidy gibts für PHP ab 4.3.x (v1) und für PHP 5 (v2) und das kann auch noch mehr, zB. ein komplettes “DOM” für HTML/XHTML/XML Dokumente nach PHP bringen. Auch kann der Output von kompletten Seiten automatisch per PHP-INI-Direktive durch Tidy geschickt werden, allerdings macht das keinen Sinn bei anderen Dokumenten, wie zB. Grafiken.
Vor lauter Tidy sollte aber nicht vergessen werden, dass es bei einigen Programmen durchaus Sinn macht, diese zu überarbeiten. Denn eine fehlerhafte Ausgabe kann ein Indiz dafür sein, das es neben eher formellen Ausgabefehlern richtig handfeste, sicherheitsrelevante Fehlfunktionen gibt.