Кодирование параметров запроса танцора

#perl #encoding #dancer

#perl #кодирование #танцовщица #танцор

Вопрос:

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


Обновить:

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

 sub _decode {
    my ($h) = @_; 
    return if not defined $h; 

    if (!ref($h) amp;amp; !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:

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

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

Комментарии:

1. Из любопытства, по какой причине вы избегаете UTF-8?

Ответ №1:

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

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

Комментарии:

1. Когда я это делаю, регистратор выходит из строя .. t => sub { Encode::decode(настройка (‘charset’)) в Logger / Abstract.pm

2. Интересно, не могли бы вы сообщить об этой ошибке на странице GitrHub, пожалуйста: github.com/sukria/Dancer/issues