Я победил скрипт. Не понял ещё как, но победил.
Кто подскажет, в чём фишка, тому пряник.
Было:
##########################################
sub QueryReader {
#
#Прочитаем данные, посланные методом GET:
$buffer_get = "$ENV{\'QUERY_STRING\'}";
@pairs_get = split(/&/, $buffer_get);
foreach $pair (@pairs_get) {
&Named_Valuer;
}
#
#Прочитаем данные, посланные методом POST:
sysread(STDIN,$buffer_post,$ENV{\'CONTENT_LENGTH\'}
);
@pairs_post = split(/&/, $buffer_post);
foreach $pair (@pairs_post) {
&Named_Valuer;
}
}
#
#Подпрограмма извлечения имён и значений переменных
#и замены \'лишних/левых\' символов.
sub Named_Valuer {
($name, $value) = split(/=/, $pair);
$name =~ s/\\+/ /g;
$name =~ s/%([0-9a-hA-H]{2})/pack(\'C\',hex($1))/ge;
$name =~ s/\\&/\\&\\;/g;
$name =~ s/\\"/\\"\\;/g;
$name =~ s/\\⌠/\\"\\;/g;
$name =~ s/\\■/\\"\\;/g;
$name =~ s/\'/\\&rsquo\\;/g;
$name =~ s/`/\\&rsquo\\;/g;
$name =~ s/▒/\\&rsquo\\;/g;
$name =~ s/▓/\\&rsquo\\;/g;
$name =~ s/\\<\\;/g;
$name =~ s/>/\\>\\;/g;
$name =~ s/\\n/!!PeReHodStRoKi!!/g;
$name =~ s/\\|/!!VeRtPaLkA!!/g;
$value =~ s/\\+/ /g;
$value =~ s/%([0-9a-hA-H]{2})/pack(\'C\',hex($1))/ge;
$value =~ s/\\&/\\&\\;/g;
$value =~ s/\\"/\\"\\;/g;
$value =~ s/\\⌠/\\"\\;/g;
$value =~ s/\\■/\\"\\;/g;
$value =~ s/\'/\\&rsquo\\;/g;
$value =~ s/`/\\&rsquo\\;/g;
$value =~ s/▒/\\&rsquo\\;/g;
$value =~ s/▓/\\&rsquo\\;/g;
$value =~ s/\\<\\;/g;
$value =~ s/>/\\>\\;/g;
$value =~ s/\\n/!!PeReHodStRoKi!!/g;
$value =~ s/\\|/!!VeRtPaLkA!!/g;
$PostedData{$name} = $value;
}
#
#Конец.
#########################################
Стало:
##########################################
sub QueryReader {
my(@pairs, $pair, $name, $value);
my $query = new CGI;
@pairs = split(/&/, $ENV{\'QUERY_STRING\'});
foreach $pair (@pairs) {
($name,$value) = split(/=/, $pair);
$name =~ tr/+/ /;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$name =~ s/\\&/\\&\\;/g;
$name =~ s/\\"/\\"\\;/g;
$name =~ s/\\“/\\"\\;/g;
$name =~ s/\\”/\\"\\;/g;
$name =~ s/\'/\\&rsquo\\;/g;
$name =~ s/`/\\&rsquo\\;/g;
$name =~ s/‘/\\&rsquo\\;/g;
$name =~ s/’/\\&rsquo\\;/g;
$name =~ s/\\<\\;/g;
$name =~ s/>/\\>\\;/g;
$name =~ s/\\n/!!PeReHodStRoKi!!/g;
$name =~ s/\\|/!!VeRtPaLkA!!/g;
$value =~ s/\\&/\\&\\;/g;
$value =~ s/\\"/\\"\\;/g;
$value =~ s/\\“/\\"\\;/g;
$value =~ s/\\”/\\"\\;/g;
$value =~ s/\'/\\&rsquo\\;/g;
$value =~ s/`/\\&rsquo\\;/g;
$value =~ s/‘/\\&rsquo\\;/g;
$value =~ s/’/\\&rsquo\\;/g;
$value =~ s/\\<\\;/g;
$value =~ s/>/\\>\\;/g;
$value =~ s/\\n/!!PeReHodStRoKi!!/g;
$value =~ s/\\|/!!VeRtPaLkA!!/g;
$PostedData{$name} = $value;
}
my (@keylist) = sort($query->param());
foreach $key (@keylist) {
# may be dealing with multiple values; need to join with comma
$value = join(\', \', $query->param($key));
$name = $key;
$name =~ s/\\&/\\&\\;/g;
$name =~ s/\\"/\\"\\;/g;
$name =~ s/\\“/\\"\\;/g;
$name =~ s/\\”/\\"\\;/g;
$name =~ s/\'/\\&rsquo\\;/g;
$name =~ s/`/\\&rsquo\\;/g;
$name =~ s/‘/\\&rsquo\\;/g;
$name =~ s/’/\\&rsquo\\;/g;
$name =~ s/\\<\\;/g;
$name =~ s/>/\\>\\;/g;
$name =~ s/\\n/!!PeReHodStRoKi!!/g;
$name =~ s/\\|/!!VeRtPaLkA!!/g;
$value =~ s/\\&/\\&\\;/g;
$value =~ s/\\"/\\"\\;/g;
$value =~ s/\\“/\\"\\;/g;
$value =~ s/\\”/\\"\\;/g;
$value =~ s/\'/\\&rsquo\\;/g;
$value =~ s/`/\\&rsquo\\;/g;
$value =~ s/‘/\\&rsquo\\;/g;
$value =~ s/’/\\&rsquo\\;/g;
$value =~ s/\\<\\;/g;
$value =~ s/>/\\>\\;/g;
$value =~ s/\\n/!!PeReHodStRoKi!!/g;
$value =~ s/\\|/!!VeRtPaLkA!!/g;
$PostedData{$name} = $value;
}
}
##########################################
Ладно, это был тест под ишаком, ща в пингвина залезу...