2011-11-25 3 views
1

레일스에서 ​​쿼리 매개 변수를 utf8로 디코딩 할 수 있습니까?레일 2.3.9 쿼리 매개 변수 인코딩

내가/foo는? PARAM = £

같은 것을 가지고 내가 내 컨트롤러에서 매개 변수 매개 변수가 ASCII-8BIT로 인코딩에 액세스하려고합니다. 다른 많은 문자열이 UTF-8로 인코딩되고 루비가 혼합 인코딩을 원하지 않기 때문에 많은 것들이 중단됩니다.

params[:param].encoding == Encoding.find("ASCII-8BIT") 

답변

2

이 솔루션은이를 위해 http://jasoncodes.com/posts/ruby19-rails2-encodings

덕분에 뛰어난 기사에서 제이슨의 풍에 공장을 가지고있다! 당신은 레일 인 2.3.x 시리즈에있는 경우

, 당신은

raise "Check if this is still needed on " + Rails.version unless Rails.version == '2.3.10' 

class ActionController::Base 

    def force_utf8_params 
    traverse = lambda do |object, block| 
     if object.kind_of?(Hash) 
     object.each_value { |o| traverse.call(o, block) } 
     elsif object.kind_of?(Array) 
     object.each { |o| traverse.call(o, block) } 
     else 
     block.call(object) 
     end 
     object 
    end 
    force_encoding = lambda do |o| 
     o.force_encoding(Encoding::UTF_8) if o.respond_to?(:force_encoding) 
    end 
    traverse.call(params, force_encoding) 
    end 
    before_filter :force_utf8_params 

end 

다른를 확인하시기 바랍니다 문제를 해결하기 위해 콘텐츠를 다음과 같이 설정/초기화/utf8_params.rb라는 파일을 작성해야합니다 기사의 팁, 특히보기의 마술 주석 주변. Jason에게 다시 한 번 감사드립니다.

+0

내 경우에는'ActionController :: Base' 대신'ApplicationController'를 원숭이 패치해야했습니다. 레일즈 2.3.14에서 실행되는 Radiant CMS를 사용하고 있습니다. –