2011-10-11 64 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