2013-06-29 13 views
44

Given napis:analizowaniem ciąg dodać do URL-zakodowane URL

"Hello there world" 

Jak mogę utworzyć ciąg URL zakodowane tak:

"Hello%20there%20world" 

Chciałbym również wiedzieć, co jeśli łańcuch ma inne symbole, np .:

"hello there: world, how are you" 

Jaki byłby najłatwiejszy sposób na zrobienie tego? Miałem zamiar przeanalizować, a następnie skompilować jakiś kod do tego.

Odpowiedz

82
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" 
+3

Jeśli chcesz także kodować kropki: 'URI.encode ('api.example.com'/\ W /)' – Dennis

14

Przydaje się do tego Ruby's URI. Można budować cały URL programowo i dodaj parametry zapytania przy użyciu tej klasy, i będzie ona obsługiwać kodowanie dla Ciebie:

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" 

przykładach są przydatne:

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" 

Linki te mogą być również przydatne:

+0

Jak mogę osadzić require 'URI' do pliku html.erb? Czy muszę włożyć go do kontrolera? –

+2

Dobrze, gdy zaistnieje potrzeba więcej niż trywialnej logiki, to zrobić wszystkie "computin" w kontrolerze. –

+0

Cool. Kiedy powinniśmy używać pomocników? A co, jeśli zrobimy komputer, który będzie używany w wielu miejscach pomocnika i dołączymy do kontrolerów. Czy to ma znaczenie? –

4

Jeśli ktoś jest zainteresowany, to najnowszy sposób, aby to zrobić, to robi w ERB:

<%= u "Hello World !" %> 

to uczyni:

Witaj% 20World% 20% 21

u jest skrótem od url_encode

można znaleźć w dokumentacji here

+1

Punkty premiowe za aktualizację starej odpowiedzi za pomocą nowych metod! – cabgfx

Powiązane problemy