2011-10-11 40 views
1

假设我有一个以'cp1251'编码的页面,并且我提交了一个表格,那么我的参数将会在'cp1251'中。但是当我在Dancer中访问我的参数时,我只能得到'?'标记。我如何访问传递的数据?舞者请求params编码


更新:

好像有一个叫子_decode /波纹管/在Request.pm这就是所谓的每一个参数。有没有办法告诉舞者不要叫这个子?

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;

+0

出于好奇,你为什么避免使用UTF-8? – ikegami

回答

0

自动编码仅在设置“字符集”设置时发生。

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

+0

当我这样做时,记录器崩溃.. t => sub {Encode :: decode(setting('charset')at Logger/Abstract.pm – bliof

+0

有趣的是,你可以在GitrHub页面上报告该错误:http:/ /github.com/sukria/Dancer/issues – sukria