【问题标题】:Dancer request params encoding舞者请求参数编码
【发布时间】: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?

标签: perl encoding dancer


【解决方案1】:

只有在设置了“charset”设置时才会发生自动编码。

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

【讨论】:

  • 当我这样做时,记录器崩溃.. t => sub { Encode::decode(setting('charset') at Logger/Abstract.pm
  • 有趣,您能否在 GitrHub 页面上报告该错误:github.com/sukria/Dancer/issues
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-14
  • 2013-09-08
  • 1970-01-01
相关资源
最近更新 更多