如何在 JavaScript 和 Ruby 中对原始 URL 进行编码/解码以在两者中获得相同的值?

发布于 2024-09-01 04:36:06 字数 556 浏览 4 评论 0原文

我正在开发一个 Web 应用程序,我必须在代码的 JavaScript 端和 Ruby 后端对字符串进行编码和解码。唯一的问题是 JavaScript 和 Ruby 的转义方法有一些细微的差别。在 JavaScript 中," " 被视为 "%20",但在 ruby​​ 中," " 被编码为 "+".

有办法解决这个问题吗?另一种在原始 URL 编码中对字符串进行编码的 Ruby 方法?

经过一些 Selenium 测试后,我注意到由于某种原因 URI.unescape"£""?" 之间混合了。如果我在 JavaScript 中使用 encodeURIComponent("£"); ,然后在 Ruby 中使用 URI.unescape("%C2%A3") ,这就是我们编码时获得的值"£" 符号,我得到返回的 "?" 符号。有什么解决办法吗?

I am working on a web application where I have to encode and decode a string at the JavaScript side and Ruby backend of the code. the only problem is that the escape methods for JavaScript and Ruby have a small difference. in JavaScript the " " is treated as "%20" but in ruby the " " is encoded to "+".

Any way to solve this? Another Ruby method to encode a string in raw URL encode?

After some Selenium testing I noticed that for some reason the URI.unescape mixes up between the "£" and the "?". If I use encodeURIComponent("£"); in JavaScript and then URI.unescape("%C2%A3") in Ruby which is the value we get when we encode the "£" sign, I get the "?" sign returned. Any solution?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

久夏青 2024-09-08 04:36:06

使用

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

在 ruby​​ 和

encodeURIComponent(foo); 

javascript 中

,这两者的行为相同,并将空格编码为 %20。

Use

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

in ruby, and

encodeURIComponent(foo); 

in javascript

Both these will behave equally and encode space as %20.

书间行客 2024-09-08 04:36:06

URI.escape 已弃用,替代方法是 ERB::Util.url_encode

ERB::Util.url_encode(foo)

如果您在 .erb 文件中使用它,您可以执行以下操作:

u(foo)

URI.escape was deprecated, an alternative is ERB::Util.url_encode.

ERB::Util.url_encode(foo)

If you are using it inside an .erb file you can do:

u(foo)
那一片橙海, 2024-09-08 04:36:06
require "uri";
puts URI.escape "1 2;", Regexp.new("[^0-9a-z\\-_.!~*'()]", "i");
require "uri";
puts URI.escape "1 2;", Regexp.new("[^0-9a-z\\-_.!~*'()]", "i");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文