web-dev-qa-db-fra.com

Chaîne d'analyse à ajouter à une URL encodée en URL

Compte tenu de la ficelle:

"Hello there world"

comment puis-je créer une chaîne encodée en URL comme ceci:

"Hello%20there%20world"

J'aimerais aussi savoir quoi faire si la chaîne a aussi d'autres symboles, comme:

"hello there: world, how are you"

Quel serait le moyen le plus simple de le faire? J'allais analyser puis construire du code pour cela.

63
require 'uri'

URI.encode("Hello there world")
#=> "Hello%20there%20world"
URI.encode("hello there: world, how are you")
#=> "hello%20there:%20world,%20how%20are%20you"

URI.decode("Hello%20there%20world")
#=> "Hello there world"
115
Arie Xiao

Ruby's [~ # ~] uri [~ # ~] est utile pour cela. Vous pouvez créer l'URL entière par programmation et ajouter les paramètres de requête à l'aide de cette classe, qui gérera le codage pour vous:

require 'uri'

uri = URI.parse('http://foo.com')
uri.query = URI.encode_www_form(
  's' => "Hello there world"
)
uri.to_s # => "http://foo.com?s=Hello+there+world"

Les exemples sont utiles:

URI.encode_www_form([["q", "Ruby"], ["lang", "en"]])
#=> "q=Ruby&lang=en"
URI.encode_www_form("q" => "Ruby", "lang" => "en")
#=> "q=Ruby&lang=en"
URI.encode_www_form("q" => ["Ruby", "Perl"], "lang" => "en")
#=> "q=Ruby&q=Perl&lang=en"
URI.encode_www_form([["q", "Ruby"], ["q", "Perl"], ["lang", "en"]])
#=> "q=Ruby&q=Perl&lang=en"

Ces liens pourraient également être utiles:

16
the Tin Man

Alors que la réponse actuelle dit d'utiliser URI.encode qui est obsolète et obsolète depuis Ruby 1.9.2. Il est préférable d’utiliser CGI.escape ou ERB::Util.url_encode.

14
Benjamin

Si quelqu'un est intéressé, la méthode la plus récente consiste à utiliser ERB:

    <%= u "Hello World !" %>

Cela rendra:

Bonjour% 20World% 20% 21

u est l'abréviation de url_encode

Vous pouvez trouver la documentation ici

13
oschvr