Допустим, у меня есть страница, которая закодирована в 'cp1251', и я отправляю форму, тогда мои параметры будут в 'cp1251'. Но когда я получаю доступ к своим параметрам в Dancer, я получаю только оценки «?». Как я могу получить доступ к данным, которые передаются?
Обновление:
Кажется, в Request.pm есть подпрограмма _decode / bellow /, которая вызывается для каждого параметра. Есть ли способ сказать Dancer не называть этот саб?
sub _decode {
my ($h) = @_;
return if not defined $h;
if (!ref($h) && !utf8::is_utf8($h)) {
return decode('UTF-8', $h);
}
if (ref($h) eq 'HASH') {
while (my ($k, $v) = each(%$h)) {
$h->{$k} = _decode($v);
}
return $h;
}
if (ref($h) eq 'ARRAY') {
return [ map { _decode($_) } @$h ];
}
return $h;
}
Update2:
Я нашел способ получить данные.
Мне пришлось использовать request->{_http_body}->{param}
, но я не должен звонить params
до того, как он испортится.
Update3:
Чтобы это заработало, мне пришлось удалить charset
из 'config.yaml' и добавить
request->{_params_are_decoded} = 1;
в фильтре перед.