2013-06-29 3 views
44

Data la stringa:all'analisi delle stringhe da aggiungere URL con codifica URL

"Hello there world" 

come posso creare una stringa con codifica URL simile a questo:

"Hello%20there%20world" 

Vorrei anche sapere cosa fare se la stringa ha anche altri simboli, come:

"hello there: world, how are you" 

Quale sarebbe il modo più semplice per farlo? Stavo per analizzare e poi creare un codice per quello.

risposta

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

Se anche voi volete codificare punti: 'URI.encode ('api.example.com',/\ W /)' – Dennis

14

Ruby's URI è utile per questo. È possibile costruire l'intero URL a livello di codice e aggiungere i parametri di query utilizzando quella classe, e sarà gestire la codifica per voi:

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" 

Gli esempi sono utili:

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" 

Questi link potrebbe anche essere utile:

+0

Come posso incorporare i require 'uri' nel html.erb? O devo metterlo nel controller? –

+2

La cosa giusta da fare, ogni volta che c'è bisogno di qualcosa di più della semplice logica, è fare tutto il "computin" nel controller. –

+0

Fresco. Quando dovremmo usare gli aiutanti? E se facessimo un calcolo che sarebbe usato in molti posti nell'assistente e includerlo per i controllori. Importa? –

4

Se qualcuno è interessato, il nuovo modo di fare questo sta facendo in ERB:

<%= u "Hello World !" %> 

Questo renderà:

Ciao% 20World% 20% 21

u è abbreviazione di url_encode

È possibile trovare la documentazione here

+1

Punti bonus per l'aggiornamento di una vecchia risposta con nuovi metodi! – cabgfx