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

时间:2010-05-14 12:24:14

标签: javascript ruby encoding

我正在开发一个Web应用程序,我必须在JavaScript端编码和解码字符串以及代码的Ruby后端。唯一的问题是JavaScript和Ruby的转义方法有很小的区别。在JavaScript中," "被视为"%20",但在红宝石中," "被编码为"+"

有什么方法可以解决这个问题?另一个在原始URL编码中编码字符串的Ruby方法?

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

3 个答案:

答案 0 :(得分:31)

使用

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

在ruby中,

encodeURIComponent(foo); 

在javascript中

这两个行为都相同,并将空间编码为%20。

答案 1 :(得分:1)

URI.escape已过时,替代方法是ERB::Util.url_encode

ERB::Util.url_encode(foo)

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

u(foo)

答案 2 :(得分:-1)

require "uri";
puts URI.escape "1 2;", Regexp.new("[^0-9a-z\\-_.!~*'()]", "i");