Ein implizit geschlossenes Element ist eines, das kein schließendes Element besitzt, sondern einen Schrägstrich vor der schließenden spitzen Klammer.
Also wie zum Beispiel <img src="test.jpg" />.
Problem
Die Problematik ist im CPAN-Bugtracker als #22135: self-closing tags are improperly rewritten beschrieben.
Das folgende Programm dient zum Testen und filtert nur die Bilder heraus. Dabei sind in Bildern alle Attribute erlaubt.
Programmcode
#!/usr/local/bin/perl
use strict;
use warnings;
use HTML::TagFilter;
my $p = HTML::TagFilter->new (
# allow only img-Tags with all attributes
allow=>{ img=> { any => [] } }
);
$p->parse(<<'HTML');
<body onload="aaa">
<p onclick="a"><img onload="AAAA" src="a.jpg" alt="Bild 1" /></p>
<p />
<div>
<br />
<hr />
<a href="a"/></div>
<script/>
<img src="AAAA.gif" />
</body>
</html>
HTML
print $p->output;
Ausgabe
Wird das Programm aufgerufen, so erzeugt es folgende Ausgabe:
<img onload="AAAA" src="a.jpg" alt="Bild 1" /="/">
<img src="AAAA.gif" /="/">
Definitiv falsch, denn es wird ein nicht vorhandenes Attribut / mit dem Wert / erzeugt und das Schließen des Elements verschluckt.
Lösung
Im Grunde genommen einfach.
HTML-TagFilter ist ja ein Kind von HTML-Parser und erbt dessen Methoden.
Wenn HTML mit implizit geschlossenen Elementen gefiltert werden soll, muss der XML-Modus von HTML-Parser aktiviert werden.
Testcode
Das geschieht mit folgendem Zeile Perlcode:
$p->xml_mode(1);
Programmausgabe
Wird dann das Programm ausgerufen, wird auch ein schließendes Element erzeugt:
<img onclick="AAAA" src="a.jpg" alt="Bild 1"></img>
<img src="AAAA.gif"></img>
Was wiederum gültiges HTML ist.

Kommentare
#1 GwenDragon schrieb am 27.1.2008 14:50 folgendes:
Ich habe gestern das als Bugfixmöglichkeit an dem Maintainer gemeldet.
Ein neues HTML-TagFilter wird wohl demnächst kommen.
#2 GwenDragon schrieb am 3.5.2010 18:30 folgendes:
Ein Fix ist wohl doch nicht eingearbeitet worden.
#3 GwenDragon schrieb am 13.2.2011 15:19 folgendes:
Der Perl-Code
vor dem p->parse() erzeugt auch das gewünschte Ergebnis des korrekt geschlossen HTML-Elements.
↑Artikel
Kommentar für Blogeintrag
Vorschau des Kommentars
TrackBack-URL:
http://gwendragon.de/blog/Computer/Programmieren/Perl/html-tagfilter-bei-xhtml.html/trackback↑Artikel