假设我有一个以“cp1251”编码的页面,并且我提交了一个表单,那么我的参数将在“cp1251”中。但是当我在 Dancer 中访问我的参数时,我只会得到“?”标记。如何访问传递的数据?
更新:
Request.pm 中似乎有一个名为 _decode /bellow/ 的子程序,它在每个参数上都被调用。有没有办法告诉舞者不要打电话给这个潜艇?
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;
}
更新2:
我找到了一种获取数据的方法。我不得不使用request->{_http_body}->{param}
,但我不应该params
在它之前打电话,因为它会破坏它。
更新3:
为了使它工作,我必须charset
从“config.yaml”中删除并添加
request->{_params_are_decoded} = 1;
在之前的过滤器中。