1

「cp1251」でエンコードされたページがあり、フォームを送信すると、パラメータは「cp1251」になります。しかし、Dancer で自分のパラメーターにアクセスすると、'?' マークしか表示されません。渡されたデータにアクセスするにはどうすればよいですか?


アップデート:

すべてのパラメータで呼び出される Request.pm に _decode /below/ というサブがあるようです。ダンサーにこのサブを呼び出さないように指示する方法はありますか?

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


Update3:

charsetそれを機能させるには、「config.yaml」からを削除して追加する必要がありました

request->{_params_are_decoded} = 1;前のフィルターで。

4

1 に答える 1

0

自動エンコードは、「charset」設定が設定されている場合にのみ発生します。

config.yml で無効にすれば完了です。

于 2011-10-12T18:53:49.980 に答える