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"
No decodifica secuencias de escape que no hayan podido ser introducidas por 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''));