2011-10-11 5 views
1

'cp1251'로 인코딩 된 페이지가 있고 폼을 제출하면 내 매개 변수는 'cp1251'이됩니다. 그러나 댄서의 매개 변수에 액세스 할 때 나는 '?'표시 만 얻습니다. 전달 된 데이터에 어떻게 액세스합니까?댄서 요청 매개 변수 인코딩


업데이트 :

하위있는 것으로 보인다라는 _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; 
} 

갱신 2는 :

나는 데이터를 얻을 수있는 방법을 발견했다. request->{_http_body}->{param}을 사용해야했지만 손상 될 수 있으므로 params 앞에 전화해서는 안됩니다.


갱신 3 :

는 내가 'config.yaml'에서 charset을 제거하고 필터 전에에서

request->{_params_are_decoded} = 1;를 추가했다 작동하게하려면.

+0

호기심 때문에, 어떤 이유로 UTF-8을 피하고 있습니까? – ikegami

답변

0

자동 인코딩은 "charset"설정이 설정된 경우에만 발생합니다.

config.yml에서 비활성화하면 모든 작업이 완료됩니다.

+0

Logger/Abstract.pm에서 t => sub {Encode :: decode ('charset')를 설정하십시오. – bliof

+0

GitrHub 페이지에서 해당 버그를보고 해 주시겠습니까? /github.com/sukria/Dancer/issues – sukria