,
является допустимым символом в запросе (расширенное пояснение здесь https://stackoverflow.com/a/31300627/3820185)
ERB::Util.url_encode
вместо заменяет [^a-zA-Z0-9_\-.]
:
# File erb.rb, line 930
def url_encode(s)
s.to_s.dup.force_encoding("ASCII-8BIT").gsub(/[^a-zA-Z0-9_\-.]/n) {
sprintf("%%%02X", $&.unpack("C")[0])
}
end
Таким образом, при выполнении запроса, наиболее вероятно, запрос повторно анализируется для соответствия действующим стандартам.
EDIT
Также вы этого не делаетенужно вообще использовать ERB::Util.url_encode
, вы можете просто передать свой URL на URI
, он будет корректно избегать его в соответствии со стандартами.
irb(main):001:0> require 'net/http'
=> true
irb(main):002:0> link = URI 'http://example.com?q=Hello, World'
=> #<URI::HTTP http://example.com?q=Hello,%20World>
irb(main):003:0>