Ich habe einige URLs, wie
http://www.example.com/something?param1=value1¶m2=value2¶m3=value3
und ich möchte die Parameter aus diesen URLs extrahieren und sie in einem Hash erhalten. Natürlich könnte ich reguläre Ausdrücke verwenden, aber ich habe mich nur gefragt, ob es einfachere Möglichkeiten gibt, dies mit Ruby oder Rails zu tun. Ich habe im Ruby-Modul nichts gefunden, URI
aber vielleicht habe ich etwas verpasst.
Tatsächlich brauche ich eine Methode, die das tun würde:
extract_parameters_from_url("http://www.example.com/something?param1=value1¶m2=value2¶m3=value3")
#=> {:param1 => 'value1', :param2 => 'value2', :param3 => 'value3'}
Würdest du ein paar Ratschläge haben?
ruby-on-rails
ruby
uri
url-parameters
Flackou
quelle
quelle
Hash[*string.split('&').collect{|i|i.split('=')}.flatten]
Dies würde auch funktionieren, aber es ist wahrscheinlich die schlechteste Option für diesen Fall. Trotzdem finden Sie diesen Ausschnitt vielleicht interessant. (Posting als Kommentar, da ich dies nicht als Antwort betrachte :-))Antworten:
Ich denke, Sie möchten eine bestimmte URL-Zeichenfolge in einen HASH verwandeln?
Sie können http://www.ruby-doc.org/stdlib/libdoc/cgi/rdoc/classes/CGI.html#M000075 ausprobieren
kehrt zurück
quelle
CGI.parse(URI.parse(url).query)
CGI::parse(URI::parse(url).query)
Ich brauchte dasselbe für ein aktuelles Projekt. Aufbauend auf Levis Lösung ist hier eine sauberere und schnellere Methode:
quelle
param1=value1¶m1=value2
. Der zweite Wert übertrifft den ersten.Rack::Utils.build_nested_query(params)
(oderRack::Utils.build_query(params)
wenn es mit analysiert wirdRack::Utils.parse_query
).Gerade verbessert mit Levi Antwort oben -
Bei einer Zeichenfolge wie der obigen URL wird sie zurückgegeben
quelle
Rack::Utils.build_query(params)
.Für eine reine Ruby-Lösung kombinieren
URI.parse
mitCGI.parse
(dies kann verwendet werden, auch wenn Rails / Rack usw. nicht erforderlich sind):quelle
Es gibt mehrere Möglichkeiten, um Ihr Problem zu lösen. Andere haben dir einige Tricks gezeigt. Ich kenne einen anderen Trick. Hier ist mein Versuch: -
Lesen Sie die Methodendokumentation von
::decode_www_form
.quelle
Schauen Sie sich das adressierbare Juwel an - ein beliebter Ersatz für Rubys URI-Modul, das das Parsen von Abfragen vereinfacht:
(Im Gegensatz zu URI wird anscheinend auch die Parametercodierung / -decodierung behandelt.)
quelle
In Ihrem Controller sollten Sie auf ein aufgerufenes Wörterbuch (Hash) zugreifen können
params
. Wenn Sie also wissen, wie die Namen der einzelnen Abfrageparameterparams[:param1]
lauten, müssen Sie nur darauf zugreifen. Wenn Sie die Namen der Parameter nicht kennen, können Sie das Wörterbuch durchsuchen und die Schlüssel abrufen.Einige einfache Beispiele hier .
quelle