복붙노트

[RUBY-ON-RAILS] 어떻게 루비 또는 레일이있는 URL에서 URL 매개 변수를 추출하는?

RUBY-ON-RAILS

어떻게 루비 또는 레일이있는 URL에서 URL 매개 변수를 추출하는?

내가 좋아하는, 일부 URL이

http://www.example.com/something?param1=value1&param2=value2&param3=value3

그리고 나는이 URL의 매개 변수를 추출하고 해시에서 그들을 좀하고 싶습니다. 분명히, 나는 정규 표현식을 사용할 수 있지만 루비 또는 레일과 그 작업을 수행하는 쉬운 방법이 있다면 난 그냥 궁금 해서요. 나는 루비 모듈 URI에서 아무것도 발견하지 않았습니다 그러나 아마 내가 뭔가를 놓쳤다.

사실, 나는 그렇게 할 것입니다 방법이 필요합니다 :

extract_parameters_from_url("http://www.example.com/something?param1=value1&param2=value2&param3=value3")
#=> {:param1 => 'value1', :param2 => 'value2', :param3 => 'value3'}

당신은 어떤 조언을 하시겠습니까?

해결법

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

    1.난 당신이 HASH에 특정 URL 문자열을 켜려고 생각?

    난 당신이 HASH에 특정 URL 문자열을 켜려고 생각?

    당신은 http://www.ruby-doc.org/stdlib/libdoc/cgi/rdoc/classes/CGI.html#M000075 시도 할 수 있습니다

    require 'cgi'
    
    CGI::parse('param1=value1&param2=value2&param3=value3')
    

    보고

    {"param1"=>["value1"], "param2"=>["value2"], "param3"=>["value3"]}
    
  2. ==============================

    2.나는 나 자신이 최근 프로젝트에 대해 같은 일을 필요로 발견했다. 리바이스 솔루션을 구축, 여기에 깨끗하고 빠른 방법입니다 :

    나는 나 자신이 최근 프로젝트에 대해 같은 일을 필요로 발견했다. 리바이스 솔루션을 구축, 여기에 깨끗하고 빠른 방법입니다 :

    Rack::Utils.parse_nested_query 'param1=value1&param2=value2&param3=value3'
    # => {"param1"=>"value1", "param2"=>"value2", "param3"=>"value3"}
    
  3. ==============================

    3.그냥 레위 대답 위의 개선 -

    그냥 레위 대답 위의 개선 -

    Rack::Utils.parse_query URI("http://example.com?par=hello&par2=bye").query
    

    위의 URL을 같은 문자열의 경우, 반환

    { "par" => "hello", "par2" => "bye" } 
    
  4. ==============================

    4.순수 루비 솔루션의 경우 (이 경우에도 레일 / 랙 등이 필요하지 않은 경우 사용할 수 있습니다) CGI.parse와 URI.parse을 결합 :

    순수 루비 솔루션의 경우 (이 경우에도 레일 / 랙 등이 필요하지 않은 경우 사용할 수 있습니다) CGI.parse와 URI.parse을 결합 :

    CGI.parse(URI.parse(url).query) 
    # =>  {"name1" => ["value1"], "name2" => ["value1", "value2", ...] }
    
  5. ==============================

    5.이 문제를 해결하기 위해 하나 이상의 방법을. 다른 사람들은 당신에게 몇 가지 트릭을 보여 주었다. 나는 또 다른 트릭을 알고있다. 여기 내 시도는 다음과 같습니다 -

    이 문제를 해결하기 위해 하나 이상의 방법을. 다른 사람들은 당신에게 몇 가지 트릭을 보여 주었다. 나는 또 다른 트릭을 알고있다. 여기 내 시도는 다음과 같습니다 -

    require 'uri'
    url = "http://www.example.com/something?param1=value1&param2=value2&param3=value3"
    uri = URI(url)
    # => #<URI::HTTP:0x89e4898 URL:http://www.example.com/something?param1=value1&param2=value2&param3=value3>
    URI::decode_www_form(uri.query).to_h # if you are in 2.1 or later version of Ruby
    # => {"param1"=>"value1", "param2"=>"value2", "param3"=>"value3"}
    Hash[URI::decode_www_form(uri.query)] # if you are below 2.1 version of Ruby
    # => {"param1"=>"value1", "param2"=>"value2", "param3"=>"value3"}
    

    의 :: decode_www_form 메소드 docomentation을 읽어보십시오.

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

    6.주소 지정 보석 확인 - 쿼리를 쉽게 분석하게 루비의 URI 모듈에 대한 인기가 교체 :

    주소 지정 보석 확인 - 쿼리를 쉽게 분석하게 루비의 URI 모듈에 대한 인기가 교체 :

    require "addressable/uri"
    uri = Addressable::URI.parse("http://www.example.com/something?param1=value1&param2=value2&param3=value3")
    uri.query_values['param1']
    => 'value1'
    

    (또한 URI 명백하게 달리, 디코딩 / 인코딩 PARAM 처리)

  7. ==============================

    7.당신의 컨트롤러에서는 PARAMS라는 사전 (해시)에 액세스 할 수 있어야합니다. [: PARAM1] 그래서 당신은 각 쿼리 매개 변수의 이름이 무엇인지 알고 있다면, 그럼 그냥 PARAMS 할 ... 액세스 그것에 당신이 매개 변수의 이름이 무엇인지 모르는 경우, 당신은 사전을 통과 얻을 수있는 키.

    당신의 컨트롤러에서는 PARAMS라는 사전 (해시)에 액세스 할 수 있어야합니다. [: PARAM1] 그래서 당신은 각 쿼리 매개 변수의 이름이 무엇인지 알고 있다면, 그럼 그냥 PARAMS 할 ... 액세스 그것에 당신이 매개 변수의 이름이 무엇인지 모르는 경우, 당신은 사전을 통과 얻을 수있는 키.

    여기에 몇 가지 간단한 예제.

  8. from https://stackoverflow.com/questions/2500462/how-to-extract-url-parameters-from-a-url-with-ruby-or-rails by cc-by-sa and MIT license