javascript - 为什么不 decodeURI ("a+b") == "a b"?

标签 javascript ruby urlencode decode encode

我正在尝试在 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"

基本上我需要一种编码/解码 URL 的方法,它在 Javascript 和 Ruby 中的工作方式相同。

编辑 decodeURIComponent 也好不到哪里去:

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

最佳答案

+ 不被视为空格。一种解决方法是将 + 替换为 %20,然后调用 decodeURIComponent

取自 php.js' urldecode :

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

关于javascript - 为什么不 decodeURI ("a+b") == "a b"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4535288/

相关文章:

ios - Swift - 编码 URL

javascript - 放大图像的矩形选择(javascript)

javascript - 在 html5 Canvas 上绘制点

ruby - 在 Heroku 上部署,如何指定用于 bundler 的 ruby​​ 版本?

asp.net - HttpUtility.UrlEncode 和 Application_Start

python - 如何在json中将汉字编码为 'gbk',格式化一个url请求参数String?

javascript - 根据条件以 Angular 定义路线

javascript - 我怎样才能让图像设置一个类来显示 :none and then set a specific id to display:inline

ruby-on-rails - `each` 循环中的下一次迭代

ruby - WebSocket 和 EventMachine 超时和错误恢复