Saltar al contenido

Cómo obtener parámetros para URL con espacios en blanco como ‘% 20’ en lugar de ‘+’ en Rails

Nuestros mejores desarrolladores han agotado sus provisiones de café, por su búsqueda noche y día por la solución, hasta que Matías halló el hallazgo en GitLab así que en este momento la compartimos contigo.

Solución:

Recomendaría limitarse al uso de un gsubtal vez con un comentario para explicar la necesidad de tal comportamiento.

Mientras tu pudo resolver el problema mediante el uso de URI.escape, supuestamente está en desuso, ya que no se ajusta completamente a las especificaciones RFC. Ver aquí para un gran artículo sobre él.

Hash#to_param es un alias de Hash#to_queryque llama Object#to_query. El ejemplo más simple para demostrar esto + contra %20 el problema es:

'John Key'.to_query(:name) # => "name=John+Key"

La implementación de Object#to_query es:

def to_query(key)
  "#CGI.escape(key.to_param)=#CGI.escape(to_param.to_s)"
end

Y así, encontramos que:

CGI.escape("John Key") # => "John+Key"

Por lo tanto, es por eso que he hecho referencia a las diferencias entre CGI.escape y URI.escape.

Qué tal si

URI.encode 'John Smith'
# => John%20Smith

realmente no.

Sugiera usar: your_params_hash.to_query.gsub("+", "%20")

Sección de Reseñas y Valoraciones

Al final de todo puedes encontrar las referencias de otros sys admins, tú igualmente tienes el poder mostrar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *