Portál AbcLinuxu, 1. května 2025 07:39
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ě...
Tiskni
Sdílej:
CGI::encodeHTML
ne? Tak se podívej do jeho zdrojáků a pošli vývojářům patch Jak jsem psal, tak perl vůbec neumímZ toho si nic nedělej, to asi nikdo
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"
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".
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.