Portál AbcLinuxu, 9. června 2024 05:21

perl a CGI::escapeHTML

29.3.2008 10:45 | Přečteno: 1011× | poslední úprava: 29.3.2008 12:07

Dobrý den, jsem spokojeným uživatelem VDR a jeho pluginů. Mám v lásce vdradmin-am, který vyvíjí převážně Andreas Mair.

Celý systém mám v UTF-8 (se kterým pracuje VDR i vdradmin-am), měl jsem však problém se zobrazováním "ě". Včera večer jsem se tedy odhodlal, že najdu příčinu. Jelikož vůbec perl neznám, tak mi chvilku trvalo než jsem se ve skriptu o 7000 řádcích zorientoval a pustil jsem se do pokusů.

Zjistil jsem, že stringy jsou v pořádku až do té doby než na ně je aplikován CGI::escapeHTML, který vše zpracuje správně, kromě zmiňovaného "ě". Místo ě tam cpe na začátek jeden paznak (nevím jak jinak to nazvat) \x9c a pak ostrou závorku ›.

Je možné, že je bug v této funkci nebo je ta funkce nějak zle aplikována? Aneb jak tuto nepřijemnost odstranit? Ano, můžu tyto části ve stringu nahradit tou správnou, ale rád bych nějaké komplexní řešení, abych mohl zaslat bugreport Andreasovi.

Vše běží na Debianu Etch.
Perl 5.8.8

EDIT: samozřejmě se jedná o funkci CGI::escapeHTML a na encodeHTML, jak sem tu měl původně...

       

Hodnocení: 100 %

        špatnédobré        

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

Komentáře

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře. , Tisk

Vložit další komentář

29.3.2008 11:48 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: perl a CGI::encodeHTML
Odpovědět | Sbalit | Link | Blokovat | Admin
No mělo by se to snad opravit v tom CGI::encodeHTML ne? Tak se podívej do jeho zdrojáků a pošli vývojářům patch :-)
29.3.2008 11:59 Karel Borkovec | skóre: 28 | blog: HP_NX9010 | Tábor
Rozbalit Rozbalit vše Re: perl a CGI::encodeHTML
Přesně takovou odpověď jsem čekal :-D Jak jsem psal, tak perl vůbec neumím a tvoření patche bych raději přenechal někomu jinému, pokud by se někdo takový našel ;-)
29.3.2008 12:06 Käyttäjä 11133 | skóre: 58 | blog: Ajattelee menneisyyttä
Rozbalit Rozbalit vše Re: perl a CGI::encodeHTML
Jak jsem psal, tak perl vůbec neumím
Z toho si nic nedělej, to asi nikdo :-) Pošli odkaz kde se to dá najít...
29.3.2008 12:17 Karel Borkovec | skóre: 28 | blog: HP_NX9010 | Tábor
Rozbalit Rozbalit vše Re: perl a CGI::encodeHTML

Přesně to dělá tahle podmínka z CGI.pm (řádek 2144), který je v debianu součástí balíku perl-modules.

if ($latin) {  # bug in some browsers
                $toencode =~ s{'}{'}gso;
                $toencode =~ s{\x8b}{‹}gso;
                $toencode =~ s{\x9b}{›}gso;
                if (defined $newlinestoo && $newlinestoo) {
                     $toencode =~ s{\012}{
}gso;
                     $toencode =~ s{\015}{
}gso;
                }
         }

Když jsem tu podmínku zakomentoval, tak to fungovalo správně. Musí to být ten 4. řádek, ale teď jde o to co mysleli tím "bug in some browsers"

29.3.2008 12:21 Karel Borkovec | skóre: 28 | blog: HP_NX9010 | Tábor
Rozbalit Rozbalit vše Re: perl a CGI::encodeHTML
Kurník, znova:

Přesně to dělá tahle podmínka z CGI.pm (řádek 2144), který je v debianu součástí balíku perl-modules.

if ($latin) {  # bug in some browsers
                $toencode =~ s{'}{'}gso;
                $toencode =~ s{\x8b}{‹}gso;
                $toencode =~ s{\x9b}{›}gso;
                if (defined $newlinestoo && $newlinestoo) {
                     $toencode =~ s{\012}{
}gso;
                     $toencode =~ s{\015}{
}gso;
                }
         }

Když jsem tu podmínku zakomentoval, tak to fungovalo správně. Musí to být ten 4. řádek, ale teď jde o to co mysleli tím "bug in some browsers".

21.8.2008 22:08 a1bert | skóre: 23
Rozbalit Rozbalit vše Re: perl a CGI::encodeHTML
problem neni v CGI ale ve vdradminu, ktery vola escapeHTML bez nastaveni charsetu, takze CGI si mysli, ze retezec je latin1 a proto probehne ten "# bug in some browsers" hack... staci nastavit spravne charset a vse funguje jak ma...

Založit nové vláknoNahoru

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.