Ich habe eine Zeichenfolge wie diese:
"foo=bar&bar=foo&hello=hi"
Bietet Ruby on Rails Methoden, um dies so zu analysieren, als wäre es ein Querystring, sodass ich einen Hash wie diesen erhalte:
{
:foo => "bar",
:bar => "foo",
:hello => "hi"
}
Oder muss ich es selbst schreiben?
BEARBEITEN
Bitte beachten Sie, dass die obige Zeichenfolge keine echte Abfrage einer URL ist, sondern eine Zeichenfolge, die in einem Cookie von Facebook Connect gespeichert ist.
"a[]=&a[]=z"
als{"a[]"=>["", "z"]}
, wobei jeder Parser tatsächlich vonActionController::Base
Retouren verwendet wird{:a => ["z"]}
Das
CGI::parse("foo=bar&bar=foo&hello=hi")
Gibt Ihnen
{"foo"=>["bar"], "hello"=>["hi"], "bar"=>["foo"]}
quelle
Bearbeiten: Wie in den Kommentaren erwähnt, kann das Symolisieren von Schlüsseln Ihren Server herunterfahren, wenn jemand Sie verletzen möchte. Ich mache es immer noch oft, wenn ich an Low-Profile-Apps arbeite, weil es die Arbeit erleichtert, aber ich würde es für High-Stake-Apps nicht mehr tun
Vergessen Sie nicht, die Schlüssel zu symbolisieren, um das gewünschte Ergebnis zu erzielen
Rack::Utils.parse_nested_query("a=2&b=tralalala").deep_symbolize_keys
Diese Operation ist für Duplikate destruktiv.
quelle
Wenn Sie über die URLs sprechen, die verwendet werden, um Daten über die Parameter abzurufen
> request.url => "http://localhost:3000/restaurants/lokesh-dhaba?data=some&more=thisIsMore"
Dann, um die Abfrageparameter zu erhalten. verwenden
> request.query_parameters => {"data"=>"some", "more"=>"thisIsMore"}
quelle
Wenn Sie einen Hash möchten, können Sie verwenden
Hash[CGI::parse(x).map{|k,v| [k, v.first]}]
quelle
CGI.parse(query).transform_values(&:first)