舞者请求参数编码

时间:2011-10-11 13:22:39

标签: perl encoding dancer

假设我有一个以'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:

要使其正常工作,我必须从'config.yaml'中移除charset并添加

前过滤器中的

request->{_params_are_decoded} = 1;

1 个答案:

答案 0 :(得分:0)

自动编码仅在设置“charset”设置时发生。

在config.yml中禁用它,你就完成了。