Chaîne d’parsing à append à l’URL encodée dans l’URL

Étant donné la chaîne:

"Hello there world" 

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

 "Hello%20there%20world" 

Je voudrais aussi savoir quoi faire si la chaîne a aussi d’autres symboles, comme:

 "hello there: world, how are you" 

Quelle serait la manière la plus simple de le faire? J’allais parsingr et ensuite construire du code pour cela.

 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" 

L’ URI de Ruby est utile pour cela. Vous pouvez créer l’URL complète par programmation et append les parameters de requête à l’aide de cette classe, et cela gérera l’encodage 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 peuvent également être utiles:

  • Quand faut-il encoder l’espace à plus (+) ou% 20?
  • URL encodant le caractère espace: + ou% 20?
  • 17.13.4 Formater les types de contenu à partir des recommandations “Formulaires dans les documents HTML” du W3.

Si quelqu’un est intéressé, la manière la plus récente de procéder est la suivante:

  <%= u "Hello World !" %> 

Cela va rendre:

Bonjour% 20World% 20% 21

u est court pour url_encode

Vous pouvez trouver les documents ici

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 .