[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