[Munich-pm] XML::RSS::Parser::Lite - Whitespace in Source
Stefan Bauer
stefan.bauer at cubewerk.de
Wed Feb 15 00:55:36 PST 2012
-----Ursprüngliche Nachricht-----
Von: Harald.Joerg at arcor.de
Gesendet: Mi 15.02.2012 09:48
Betreff: Re: [Munich-pm] XML::RSS::Parser::Lite - Whitespace in Source
An: Stefan Bauer <stefan.bauer at cubewerk.de>;
> Das ist allerdings interessant. Na denn mal los. perl -d -e 1...
>
> Guckst Du HTTP/Message.pm, Zeile 401ff:
>
> if ($is_xml) {
> # Get rid of the XML encoding declaration if present
> $$content_ref =~ s/^\x{FEFF}//;
> if ($$content_ref =~ /^(\s*<\?xml[^\x00]*?\?>)/) {
> substr($$content_ref, 0, length($1)) =~ s/\sencoding\s*=\s*(["']).*?\1//;
> }
> }
>
> Das kommt mir ja fast bekannt vor aus meiner vorigen Antwort.
> Offensichtlich hat LWP durchaus die Absicht, eine BOM wegzufressen, wenn
> er eine sieht. Wenn Du aus Datei liest, dann funktioniert das auch.
> Nur: Was ist der Unterschied zu get via HTTP?
>
> Die böse Abfrage ist ein paar Zeilen drüber, Zeile 359:
>
> if ($self->content_is_text || (my $is_xml = $self->content_is_xml)) {
>
> Und da haben wir den Übeltäter. Die *Datei* wird binär eingelesen, es
> gibt keinen Content-Type, $self->content_is_text returniert false und
> $self->content_is_xml returniert (richtigerweise) true. $is_xml wird
> versorgt.
>
> Übers Netz dagegen kommt ein Content-Type text/xml im HTTP-Header. Und
> schwupps, $self->content_is_text wird true. Damit nimmt Perl die
> Abkürzung und weist $is_xml gar nicht erst zu: Die Abfrage in Zeile 401
> geht daneben.
>
> Bei Licht betrachtet halte ich das für einen Fehler in HTTP/Message.pm,
> den Du da aufgespürt hast. Ich schau' mal, ob das schon mal auf der
> Mailing Liste diskutiert wurde.
Danke für die Analyse. Mich würde das Ergebnis dann natürlich auch interessieren.
Mein Parsing klappt jedenfalls schon und ich bin glücklich :)
Stefan
More information about the Munich-pm
mailing list