[Munich-pm] XML::RSS::Parser::Lite - Whitespace in Source

Stefan Bauer stefan.bauer at cubewerk.de
Tue Feb 14 23:42:06 PST 2012


-----Ursprüngliche Nachricht-----
Von:	Harald.Joerg at arcor.de
Gesendet:	Mi 15.02.2012 01:39
Betreff:	Re: [Munich-pm] XML::RSS::Parser::Lite - Whitespace in Source
An:	Stefan Bauer <stefan.bauer at cubewerk.de>; 
CC:	Perl Mongers, MUC <munich-pm at pm.org>; 

> Die RSS-Seite ist korrekt, der Parser stolpert.  Der junk, den Du
> siehst, ist nämlich tatsächlich *vor* dem ersten Element, und es handelt
> sich dabei um die BOM (Byte Order Mark), oder hex EF BB BF.  UTF-8 darf
> sowas mitbringen, weil's eben Unicode ist, obwohl man es bei UTF-8 (im
> Unterschied zu UTF-16) gar nicht braucht.  Perl an sich macht das
> richtig, drum siehst Du rein gar nichts, wenn Du den RSS-Text mit print
> ausgibst.
> 
> Wenn Du das Ding mit use bytes einliest und die ersten drei Bytes
> schlachtest, dann stirbt der Parser nicht mehr.
> 
> Wenn Du das Ding mit binmode UTF8 einliest, dann musst Du nur den ersten
> Character (hier nicht Byte!) schlachten.  Der sieht nämlich so aus:
> 
>   DB<16> printf("%X",ord(substr($xml,0,1)))
> FEFF
> 
> ...und FEFF ist eben der Unicode-Codepoint der BOM.
> Ein robuster Code könnte so aussehen:
> 
>    1) den Content-Type checken: bei text/xml ist UTF-8 default
>    2) falls ja: mit binmode $fh, ':UTF8' einlesen
>    3) danach mit $rss =~ s/^\x{FEFF}// die BOM schlachten,
>       falls vorhanden
>    4) ...und dann erst an den Parser verfüttern.

Hallo Harald,

danke für die äußerst ausführliche Erklärung. Auf eine Antwort wartend habe ich folgenden Workaround genutzt gestern:

getstore("http://rss.jobsearch.monster.com/rssquery.ashx?rad_units=km&lv=11&lv=12&cy=de&indid=77&pp=15&jt=3&tm=0&sort=rv.di.dt&occ=660.11996&occ=660.11774&occ=660.11754&occ=660.11772&occ=660.11787&occ=660.11847&occ=660.11848&occ=660.11969&occ=660.11970&occ=660.11904&occ=660.11882&occ=660.11979&occ=660.11987&occ=660.12005&baseurl=stellenanzeige.monster.de%27",$rss_datei);
$xml = get("file://$rss_datei");

Ich frage mich jetzt, warum durch diese Methode die BOM verschwunden ist?


Stefan


More information about the Munich-pm mailing list