Кодировка запроса танцовщицы - PullRequest
1 голос
/ 11 октября 2011

Допустим, у меня есть страница, которая закодирована в 'cp1251', и я отправляю форму, тогда мои параметры будут в 'cp1251'. Но когда я получаю доступ к своим параметрам в Dancer, я получаю только оценки «?». Как я могу получить доступ к данным, которые передаются?


Обновление:

Кажется, в Request.pm есть подпрограмма _decode / bellow /, которая вызывается для каждого параметра. Есть ли способ сказать Dancer не называть этот саб?

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:

Чтобы это заработало, мне пришлось удалить charset из 'config.yaml' и добавить

request->{_params_are_decoded} = 1; в фильтре перед.

1 Ответ

0 голосов
/ 12 октября 2011

Автоматическое кодирование происходит только тогда, когда установлена ​​настройка "charset".

Отключите его в config.yml, и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...