2010-05-14 9 views
11

Estoy trabajando en una aplicación web donde tengo que codificar y decodificar una cadena en el lado de JavaScript y el backend de Ruby del código. el único problema es que los métodos de escape para JavaScript y Ruby tienen una pequeña diferencia. en JavaScript, el " " se trata como "%20" pero en ruby ​​el " " está codificado como "+".¿Cómo puedo codificar/decodificar URL sin formato en JavaScript y Ruby para obtener los mismos valores en ambos?

¿Alguna manera de resolver esto? ¿Otro método de Ruby para codificar una cadena en codificación URL sin formato?

Después de algunas pruebas de Selenio noté que por alguna razón el URI.unescape se mezcla entre el "£" y el "?". Si uso encodeURIComponent("£"); en JavaScript y luego URI.unescape("%C2%A3") en Ruby, que es el valor que obtenemos cuando codificamos el signo "£", obtengo el signo "?" devuelto. ¿Alguna solución?

Respuesta

30

Uso

URI.escape(foo, Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")) 

en rubí, y

encodeURIComponent(foo); 

en javascript

Ambos se comportará igual y espacio codificar como% 20.

+0

gracias, pero por alguna razón el "URI.escape (foo, Regexp.new ([^ # {URI :: :: modelo sin reservas}]"))" no está funcionando para mí, que da un error y la página no se carga cuando lo llama. He requerido 'uri' en la parte superior de la clase. Gracias –

+0

Sólo lo probé en un archivo .rb, funcionó como un encanto allí .. –

+0

acaba de conseguirlo trabajando, siendo el idiota que soy estaba teniendo Regexp.new ("[^ # {URI :: PATTERN :: UNRESERVED}]") en el contexto también ... que pasa cuando has estado mirando el código durante 10 horas seguidas, muchas gracias @sean, todo funciona correctamente ahora –

-1
require "uri"; 
puts URI.escape "1 2;", Regexp.new("[^0-9a-z\\-_.!~*'()]", "i"); 
Cuestiones relacionadas