【发布时间】:2011-10-14 15:04:25
【问题描述】:
假设我有一个以“cp1251”编码的页面,并且我提交了一个表单,那么我的参数将在“cp1251”中。但是当我在 Dancer 中访问我的参数时,我只得到“?”标记。如何访问传递的数据?
更新:
Request.pm 中似乎有一个名为 _decode /bellow/ 的子程序,每个参数都会调用它。有没有办法告诉 Dancer 不要调用这个 sub?
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:
为了让它工作,我必须从 'config.yaml' 中删除 charset 并添加
request->{_params_are_decoded} = 1; 在前置过滤器中。
【问题讨论】:
-
出于好奇,您出于什么原因避免使用 UTF-8?