我正在尝试在Ruby中编码URL并使用Javascript对其进行解码。但是,正字符给我带来了奇怪的行为。
在Ruby中:
[Dev]> CGI.escape "a b"
=> "a+b"
[Dev]> CGI.unescape "a+b"
=> "a b"
到目前为止一切顺利。但是Javascript呢?
>>> encodeURI("a b")
"a%20b"
>>> decodeURI("a+b")
"a+b"
基本上我需要一种在Javascript和Ruby中以相同方式编码/解码URL的方法。
编辑: decodeURIComponent
并不是更好:
>>> encodeURIComponent("a b")
"a%20b"
>>> decodeURIComponent("a+b")
"a+b"
答案 0 :(得分:28)
+
不被视为空格。一种解决方法是将+
替换为%20
,然后调用decodeURIComponent
取自php.js'urldecode:
decodeURIComponent((str+'').replace(/\+/g, '%20'));
答案 1 :(得分:3)
您可能需要查看URI.encode
和URI.decode
:
require 'uri'
URI.encode('a + b') # => "a%20+%20b"
URI.decode('a%20+%20b') # => "a + b"
我经常使用的替代品是Addressable::URI
:
require 'addressable/uri'
Addressable::URI.encode('a + b') #=> "a%20+%20b"
Addressable::URI.unencode('a%20+%20b') #=> "a + b"
答案 2 :(得分:2)
不解码encodeURI无法引入的转义序列。
请注意,encodeURI本身无法形成正确的HTTP GET和POST请求,例如XMLHTTPRequests,因为“&”,“+”和“=”未编码
答案 3 :(得分:-1)
如果使用php urlencode,则通过XMLHttpRequest从php发送响应时,也会遇到a + b的相同问题。要解决此问题,您必须使用php rawurlencode函数。
出于某种原因,从XMLHttpRequest到php urldecode可以正常工作。