Ruby 또는 Rails를 사용하여 URL에서 URL 매개 변수를 추출하는 방법은 무엇입니까?
몇 개의 URL이 있습니다.
http://www.example.com/something?param1=value1¶m2=value2¶m3=value3
그리고 이 URL에서 매개 변수를 추출하여 해시로 가져오고 싶습니다.분명히 정규 표현을 사용할 수 있지만 루비나 레일즈로 더 쉽게 할 수 있는 방법이 있는지 궁금했을 뿐입니다.루비 모듈에서 아무것도 찾지 못했습니다.URI
뭔가를 놓친 것 같아요
사실, 저는 그렇게 할 수 있는 방법이 필요합니다.
extract_parameters_from_url("http://www.example.com/something?param1=value1¶m2=value2¶m3=value3")
#=> {:param1 => 'value1', :param2 => 'value2', :param3 => 'value3'}
조언을 좀 해 주시겠습니까?
주어진 URL 문자열을 해시로 변환하시겠습니까?
http://www.ruby-doc.org/stdlib/libdoc/cgi/rdoc/classes/CGI.html#M000075 를 사용해 볼 수 있습니다.
require 'cgi'
CGI::parse('param1=value1¶m2=value2¶m3=value3')
돌아온다
{"param1"=>["value1"], "param2"=>["value2"], "param3"=>["value3"]}
저는 최근의 프로젝트에서 같은 것이 필요하다는 것을 알게 되었습니다.Levi의 솔루션을 기반으로 더욱 깨끗하고 빠른 방법을 소개합니다.
Rack::Utils.parse_nested_query 'param1=value1¶m2=value2¶m3=value3'
# => {"param1"=>"value1", "param2"=>"value2", "param3"=>"value3"}
위의 레비 답변으로 방금 개선됨 -
Rack::Utils.parse_query URI("http://example.com?par=hello&par2=bye").query
위 URL과 같은 문자열의 경우 반환됩니다.
{ "par" => "hello", "par2" => "bye" }
순수한 Ruby 솔루션의 경우 조합URI.parse
와 함께CGI.parse
(레일/랙 등이 필요하지 않은 경우에도 사용할 수 있습니다.
CGI.parse(URI.parse(url).query)
# => {"name1" => ["value1"], "name2" => ["value1", "value2", ...] }
문제를 해결하는 방법은 여러 가지가 있습니다.다른 사람들이 몇 가지 속임수를 보여주었습니다.또 다른 요령을 알아요.여기 제 시도가 있습니다 :-
require 'uri'
url = "http://www.example.com/something?param1=value1¶m2=value2¶m3=value3"
uri = URI(url)
# => #<URI::HTTP:0x89e4898 URL:http://www.example.com/something?param1=value1¶m2=value2¶m3=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"}
의 방법 설명서를 읽어 보십시오.
쿼리 구문 분석을 쉽게 하는 Ruby의 URI 모듈을 대체하는 주소 지정 가능한 보석을 확인하십시오.
require "addressable/uri"
uri = Addressable::URI.parse("http://www.example.com/something?param1=value1¶m2=value2¶m3=value3")
uri.query_values['param1']
=> 'value1'
(URI와 달리 파라미터 인코딩/디코딩도 처리합니다.)
CGI를 사용하는 것은 Ruby 2.7/3에서 구식 접근 방식일 수 있습니다.
URI를 사용하여 이를 수행하는 좋은 방법은 다음과 같습니다.
uri = URI.parse 'https://duckduckgo.com/?q=ruby+programming+language'
params = Hash[URI.decode_www_form uri.query]
# => {"q"=>"ruby programming language"}
이 방법을 사용할 수도 있습니다.
require 'uri'
require 'cgi'
uri = URI("https://example.com/?query=1&q=2&query=5")
a = CGI::parse(uri.query)
puts a #=> {"query"=>["1", "5"], "q"=>["2"]}
puts a["query"].to_s #=> ["1", "5"]
puts a["query"][0] #=> 1
puts a["query"][1] #=> 5
puts a["q"][0] #=> 2
그것은 안전하고 훨씬 쉽습니다.
슬프게도 둘 다URI
그리고.addressable
buggy URL에서 쿼리 매개 변수를 추출할 때 라이브러리가 중단됩니다.예를 들어, 다음과 같은 두 가지 요소가 모두 깨집니다.
http://localhost:4300/webapp/foo/#//controller/action?account=001-001-111&email=john%40email.com
Arthur / Levi의 솔루션을 기반으로 구축, 사용url.split("?").try(:last)
URL의 쿼리 매개변수 부분만 가져와서 사용할 수 있습니다.Rack::Utils.parse_nested_query
해당 매개 변수 문자열을 해시로 구문 분석합니다.
또는 전체:
Rack::Utils.parse_nested_query(url.split("?").try(:last))
예를 들어 다음과 같습니다.
{"account": "001-001-111", "email": "john@email.com"}
컨트롤러에서 다음 사전(해시)에 액세스할 수 있어야 합니다.params
각 쿼리 매개 변수의 이름이 무엇인지 알고 있다면 다음과 같이 하십시오.params[:param1]
액세스할 수 있습니다.매개 변수의 이름이 무엇인지 모르는 경우 사전을 이동하여 키를 가져올 수 있습니다.
여기 몇 가지 간단한 예가 있습니다.
언급URL : https://stackoverflow.com/questions/2500462/how-to-extract-url-parameters-from-a-url-with-ruby-or-rails
'programing' 카테고리의 다른 글
로컬 cocoapods 캐시에서 특정 포드를 지우거나 치료하는 방법 (0) | 2023.05.31 |
---|---|
C# 유형에 해당하는 Visual Basic 검사 (0) | 2023.05.31 |
XSSF Workbook - Java - POI .jar 해결 문제 (0) | 2023.05.31 |
현재 활동에서 루트 보기 가져오기 (0) | 2023.05.31 |
동적 버튼 클릭 이벤트 핸들러 (0) | 2023.05.31 |