2010-03-01 9 views
45

¿Hay un código urlencode de PHP equivalente en Ruby on Rails 2.3.5? (Codifica una cadena para ser utilizada en una parte de consulta de una URL) Lo busqué en Google, pero parece que todas las respuestas datan de antes de 2006 y parecen fechas. This is what I found. Parece un poco anormal llamar al CGI::escape en una vista.codificación URL equivalente en ruby ​​on rails

¿Hay una función auxiliar equivalente?

Gracias!

Respuesta

96

creo que el método u ayudante es lo que está buscando:

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

Me parece que no puede encontrar la documentación de ese método, pero si lo encuentro en un futuro próximo voy a asegúrese de poner un enlace aquí.

Editar: Puede encontrar la documentación para este método here.

+0

No. El urlencode de PHP (ver http://php.net/urlencode) hace cosas como "" -> "% 20". – Matchu

+0

Ahh, mis disculpas. Por favor, mira mi respuesta editada. –

+0

¡Ahh! ¡Todavía no he tenido la oportunidad de usar ese ayudante! SO no me permitirá cambiar los votos porque no parece pensar que tu respuesta está editada; Lo comprobaré en unos minutos para ver si eso cambia. – Matchu

60

Si desea hacerlo sin ERB, puede utilizar el siguiente:

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

Obviamente, no use esto en una vista, pero esta respuesta ayudó con la búsqueda de google que me trajo aquí :) – davetron5000

38

Esto funcionó mejor para mí que el Rack::Utils.escape:

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

Debido a que sustituyó a los espacios con %20 vez de +

+0

URI :: escape parece tener un uso diferente. Por ejemplo, no reemplaza, y: con% 2C y% 3A ni/con% 2F. Rack :: Utils lo hace. – Abdo

+9

@Abdo Creo que URI :: escape se usa cuando se inserta un URI en un atributo HTML. ES DECIR. Se escapa de las entidades que podrían causar problemas cuando se usa de esta manera 'href =" <%= ... %> "', como '" ',' <', and '> '. Rack :: Utils.escape es para cuando se insertará el contenido _within_ un URI, por ejemplo, como un parámetro. – Leo

+0

Gracias por la aclaración, @Leo :-) – Abdo