programacion orientada online objetos javascript ruby urlencode decode encode

javascript - orientada - w3c encode url



¿Por qué decodeURI("a+b")== "a b"? (3)

Es posible que desee ver URI.encode y URI.decode :

require ''uri'' URI.encode(''a + b'') # => "a%20+%20b" URI.decode(''a%20+%20b'') # => "a + b"

Una alternativa, que uso mucho, es Addressable::URI :

require ''addressable/uri'' Addressable::URI.encode(''a + b'') #=> "a%20+%20b" Addressable::URI.unencode(''a%20+%20b'') #=> "a + b"

Estoy tratando de codificar URLs en Ruby y decodificarlas con Javascript. Sin embargo, el personaje positivo me está dando un comportamiento extraño.

En Ruby:

[Dev]> CGI.escape "a b" => "a+b" [Dev]> CGI.unescape "a+b" => "a b"

Hasta ahora tan bueno. Pero ¿qué pasa con Javascript?

>>> encodeURI("a b") "a%20b" >>> decodeURI("a+b") "a+b"

Básicamente necesito un método de codificación / decodificación de URL que funcione de la misma manera en Javascript y Ruby.

Edición: decodeURIComponent no es mejor:

>>> encodeURIComponent("a b") "a%20b" >>> decodeURIComponent("a+b") "a+b"


Desde MDC decodeURI:

No decodifica secuencias de escape que no hayan podido ser introducidas por encodeURI.

Desde MDC encodeURI:

Tenga en cuenta que encodeURI por sí solo no puede formar solicitudes HTTP GET y POST, como para las solicitudes XMLHTTP, porque "&", "+" y "=" no están codificados


+ No se considera un espacio. Una solución es reemplazar + con %20 y luego llamar a decodeURIComponent

Tomado del código de usuario de urldecode :

decodeURIComponent((str+'''').replace(//+/g, ''%20''));