J'ai des URL, comme
http://www.example.com/something?param1=value1¶m2=value2¶m3=value3
et je voudrais extraire les paramètres de ces URL et les obtenir dans un hachage. Évidemment, je pourrais utiliser des expressions régulières, mais je me demandais simplement s'il y avait des moyens plus simples de le faire avec Ruby ou Rails. Je n'ai rien trouvé dans le module Ruby URI
mais j'ai peut-être manqué quelque chose.
En fait, j'ai besoin d'une méthode qui ferait cela:
extract_parameters_from_url("http://www.example.com/something?param1=value1¶m2=value2¶m3=value3")
#=> {:param1 => 'value1', :param2 => 'value2', :param3 => 'value3'}
Auriez-vous des conseils?
ruby-on-rails
ruby
uri
url-parameters
Flackou
la source
la source
Hash[*string.split('&').collect{|i|i.split('=')}.flatten]
Cela fonctionnerait aussi, mais c'est probablement la pire option pour ce cas. Mais vous pourriez tout de même trouver cet extrait intéressant. (Poster comme commentaire car je ne considère pas cela comme une réponse :-))Réponses:
Je pense que vous voulez transformer une chaîne URL donnée en un HASH?
Vous pouvez essayer http://www.ruby-doc.org/stdlib/libdoc/cgi/rdoc/classes/CGI.html#M000075
Retour
la source
CGI.parse(URI.parse(url).query)
CGI::parse(URI::parse(url).query)
J'ai eu besoin de la même chose pour un projet récent. En s'appuyant sur la solution de Levi, voici une méthode plus propre et plus rapide:
la source
param1=value1¶m1=value2
. La deuxième valeur l'emporte sur la première.Rack::Utils.build_nested_query(params)
(ouRack::Utils.build_query(params)
si analysé avecRack::Utils.parse_query
).Juste amélioré avec la réponse de Levi ci-dessus -
Pour une chaîne comme ci-dessus url, elle retournera
la source
Rack::Utils.build_query(params)
.Pour une solution Ruby pure, combiner
URI.parse
avecCGI.parse
(cela peut être utilisé même si Rails / Rack etc. ne sont pas nécessaires):la source
Il existe plusieurs façons de résoudre votre problème. D'autres vous ont montré quelques astuces. Je connais un autre truc. Voici mon essai: -
Lisez la documentation de méthode de
::decode_www_form
.la source
Découvrez la gemme adressable - un remplacement populaire du module URI de Ruby qui facilite l'analyse des requêtes:
(Il gère également apparemment l'encodage / décodage des paramètres, contrairement à l'URI)
la source
Dans votre Controller, vous devriez pouvoir accéder à un dictionnaire (hash) appelé
params
. Donc, si vous savez quels sont les noms de chaque paramètre de requête, faites simplementparams[:param1]
pour y accéder ... Si vous ne savez pas quels sont les noms des paramètres, vous pouvez parcourir le dictionnaire et obtenir les clés.Quelques exemples simples ici .
la source