我需要更换某些ascii字符,例如@和&用它们的十六进制表示形式的URL分别为40和26。
我怎样才能在红宝石中做到这一点?还有一些最显着的字符' - ',不需要替换。
答案 0 :(得分:1)
require 'uri'
URI.escape str, /[@&]/
显然,您可以使用更多要逃避的字符来扩展正则表达式。或者,如果你想进行白名单方法,你可以这么做,
URI.escape str, /[^-\w]/
答案 1 :(得分:1)
这是红宝石,所以有20种不同的方法可以做到这一点。这是我的:
>> a = 'one&two%three'
=> "one&two%three"
>> a.gsub(/[&%]/, '&' => '&'.ord, '%' => '%'.ord)
=> "one38two37three"
答案 2 :(得分:0)
我非常确定Ruby内置了URL功能。但是,如果您想要定义一些更通用的翻译工具,可以使用如下代码:
s = "h@llo world"
t = { " " => "%20", "@" => "%40" };
puts s.split(//).map { |c| t[c] || c }.join
哪个会输出
h%40llo%20world
在上面的代码中,t
是一个哈希,用于定义从特定字符到其表示的映射。字符串被分成字符,并且搜索每个字符等价的哈希值。
答案 3 :(得分:0)
更通用,更轻松:
require 'uri'
URI.escape(your_string,Regexp.new("[^#{URI::PATTERN::UNRESERVED}]")