복붙노트

[RUBY-ON-RAILS] 레일 3 개 양식을 제출에서 제거 "UTF8 = ✓"

RUBY-ON-RAILS

레일 3 개 양식을 제출에서 제거 "UTF8 = ✓"

내 레일 3 응용 프로그램에서 간단한 검색 양식을 가지고 :

<%= form_tag search_path, :method => "get" do %>
  <%= text_field_tag :q, params[:q] %>
  <%= submit_tag "search", :name => nil %>
<% end %>

사용자가 submit 버튼을 누르면, 그들은 URL로 이동 얻을 : http://myapp.com/search?utf8=%E2%9C%93&q=foobar (여기서, E2 % 9C % 93 %가 확인 표시로 표시됩니다 : ✓).

내가 완전히 제거하여 URL의 청결을 유지하려는, 그래서 나는 UTF8 매개 변수와 함께 아무것도 아니에요. 대신 http://myapp.com/search?q=foobar : 그건 내가 사용자가 URL로 이동 얻을 싶어합니다.

이걸 어떻게해야합니까?

해결법

  1. ==============================

    1.당신이 매개 변수를 사용하여 작업을 수행하지 않는 경우에도, 레일입니다. 그것은 IE의 매개 변수 인코딩에서 몇 가지 문제를 해결하는 데있다. 예후는 여기에 더 많은 정보를 가지고 :

    당신이 매개 변수를 사용하여 작업을 수행하지 않는 경우에도, 레일입니다. 그것은 IE의 매개 변수 인코딩에서 몇 가지 문제를 해결하는 데있다. 예후는 여기에 더 많은 정보를 가지고 :

    3 개 형태의 레일에 루비의 _snowman PARAM은 무엇인가?

  2. ==============================

    2.당신은 레일 UTF-8 PARAM의 목적을 이해하고, 어떤 이유로 당신은 아직도 그것을 제거 할 필요가되면, 솔루션은 단지 때 form_tag 도우미를 사용하지 않는 ... 생각보다 쉽다 :

    당신은 레일 UTF-8 PARAM의 목적을 이해하고, 어떤 이유로 당신은 아직도 그것을 제거 할 필요가되면, 솔루션은 단지 때 form_tag 도우미를 사용하지 않는 ... 생각보다 쉽다 :

    <form action="<%= search_path %>" method="get">
      <%= text_field_tag :q, params[:q] %>
      <%= submit_tag "search", :name => nil %>
    </form>
    
  3. ==============================

    3.레일에 때 form_tag 4.2 (아마도 이전)을 가지고 enforce_utf8 옵션을;

    레일에 때 form_tag 4.2 (아마도 이전)을 가지고 enforce_utf8 옵션을;

    (동일로 https://stackoverflow.com/a/28201543/430695)

  4. ==============================

    4.전용 브라우저 (또는 이익을 위해 다른 논리를) 준수 비 표준의 UTF8의 PARAM을 적용하는 보석 (utf8_enforcer_workaround)이 있습니다. 당신이 IE의 해결 방법으로 잘 행동 사용자를 귀찮게하지 않으려는 경우에 유용합니다.

    전용 브라우저 (또는 이익을 위해 다른 논리를) 준수 비 표준의 UTF8의 PARAM을 적용하는 보석 (utf8_enforcer_workaround)이 있습니다. 당신이 IE의 해결 방법으로 잘 행동 사용자를 귀찮게하지 않으려는 경우에 유용합니다.

  5. ==============================

    5.나는 GET 요청에서 PARAM을 제거하기 위해 초기화했다. 그것은 분명히 해킹.

    나는 GET 요청에서 PARAM을 제거하기 위해 초기화했다. 그것은 분명히 해킹.

    이것은에서 설정 / 초기화 / overrides.rb 간다 :

    # Don't let Rails add a utf8=✓ param to GET forms.
    # See http://stackoverflow.com/questions/3222013/what-is-the-snowman-param-in-rails-3-forms-for for details.
    module ActionView::Helpers::FormTagHelper
    private
    
      def extra_tags_for_form_with_utf8_param_excluded_from_gets(html_options)
        old = extra_tags_for_form_without_utf8_param_excluded_from_gets(html_options)
        non_get = old.include?('"_method"') || old.include?('"'+request_forgery_protection_token.to_s+'"')
        if non_get
          old
        else
          old.sub(/<[^>]+name="utf8"[^>]+"&#x2713;"[^>]*>/, '').html_safe
        end
      end
    
      alias_method_chain :extra_tags_for_form, :utf8_param_excluded_from_gets
    
    end
    

    이상적으로, 레일은 아마 이것에 대한 설정을해야한다, 또는 적어도 재 작성 extra_tags_for_form에서이 패치에 덜 지저분한 그래서.

  6. ==============================

    6.귀하와 ApplicationController이 시도 :

    귀하와 ApplicationController이 시도 :

    def default_url_options(options={})
      options.delete('utf8')
    end
    
  7. ==============================

    7.나를 위해 일한 다른 동작에 before_action 및 리디렉션을 사용. 당신이 게시물을 검색하는 경우 예를 들어, 컬렉션 검색 경로를 설정합니다.

    나를 위해 일한 다른 동작에 before_action 및 리디렉션을 사용. 당신이 게시물을 검색하는 경우 예를 들어, 컬렉션 검색 경로를 설정합니다.

    resources :posts do
      collection do
        get 'search'
      end
    end
    

    및 HTTP GET 게시물 번호 인덱스 작업에 대한 요청을합니다.

    <%= form_tag posts_path, method: :get do %>
      <%= search_field_tag :q, params[:q], placeholder: "Search posts" %>
      <%= submit_tag "Go" %>
    <% end %>
    

    후가 PostsController에,

    before_action :check_for_query, only: :index
    
        ... 
    
    
    private 
      def check_for_query
        redirect_to articles_search_url(q: params[:q]) if params[:q].present?
      end
    

    및 게시물 번호 검색 행동에 Post.search를 호출하고 인덱스 페이지를 렌더링합니다.

    def search
       Post.search(params[:q])
       render :index
    end
    

    URL은 / / 게시물과 같이 검색합니다? Q = foo는

  8. ==============================

    8.enforce_utf8 : 거짓을 때 form_tag에 나는 우리가 사용한다고 생각합니다.

    enforce_utf8 : 거짓을 때 form_tag에 나는 우리가 사용한다고 생각합니다.

    전의:

    = form_tag search_path, method: :get, id: 'searchForm', enforce_utf8: false
    
  9. from https://stackoverflow.com/questions/4487796/removing-utf8-from-rails-3-form-submissions by cc-by-sa and MIT license