2010-03-01 14 views
45

Esiste un equivalente all'urlencode di PHP in Ruby on Rails 2.3.5? (Codifica una stringa da utilizzare in una parte di query di un URL) L'ho cercato su google, ma tutte le risposte sembrano risalire a prima del 2006 e sembrano date. This is what I found. Sembra un po 'anormale chiamare CGI::escape in una vista.url encode equivalente in ruby ​​on rails

Esiste una funzione di supporto equivalente?

Grazie!

risposta

96

Credo che il metodo di u helper è quello che stai cercando:

<%=u "URL ENCODE <p>ME</p>" %> 

io non riesco a trovare la documentazione di quel metodo, ma se mi trovo in un prossimo futuro sarò assicurati di inserire un link qui.

Modifica: è possibile trovare la documentazione per questo metodo here.

+0

No. L'urlencode di PHP (vedi http://php.net/urlencode) fa cose come "" -> "% 20". – Matchu

+0

Ah, le mie scuse. Si prega di consultare la mia risposta modificata. –

+0

Ahh! Non ho ancora avuto la possibilità di usare quell'assistente! SO non mi permetterà di cambiare voti perché non sembra che la tua risposta sia modificata; Controllerò tra qualche minuto per vedere se questo cambia. – Matchu

60

Se si vuole fare senza ERB, è possibile utilizzare il seguente:

Rack::Utils.escape('http://example.com') 
#=> "http%3A%2F%2Fexample.com" 
+2

Ovviamente, non utilizzare questo in una vista, ma questa risposta ha aiutato con la ricerca di google che mi ha portato qui :) – davetron5000

38

Questo ha funzionato meglio per me rispetto al Rack::Utils.escape:

URI::escape('http://example.com/?param=Hello World') 

Perché è sostituito gli spazi con %20 invece di +

+0

URI :: escape sembra avere un uso diverso. Ad esempio, non sostituisce, e: con% 2C e% 3A né/con% 2F. Rack :: Utils fa. – Abdo

+9

@Abdo Credo che URI :: escape sia utile quando si inserisce un URI in un attributo HTML. OSSIA Sfugge a entità che causerebbero problemi se usato in questo modo 'href =" <%= ... %> "', come '" ',' <', and '> '. Rack :: Utils.escape è per quando il contenuto verrà inserito _con un _ URI, ad esempio come parametro – Leo

+0

Grazie per il chiarimento, @Leo :-) – Abdo