1

假设我有一个以“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;在之前的过滤器中。

4

1 回答 1

0

仅当设置了“字符集”设置时才会发生自动 enoding。

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

于 2011-10-12T18:53:49.980 回答