Ruby URI合并和转义
我有一个URI对象Ruby URI合并和转义,ruby,uri,Ruby,Uri,我有一个URI对象 require 'uri' uri = URI.parse 'http://example.com' 我需要将一些路径合并到此URI path = URI.escape('/?foo[123]=5') uri.merge!(path) 以及获得异常: URI::InvalidURIError: bad URI(is not URI?): /?foo[123]=5 这是因为路径中的某些符号被视为不安全(“[”和“]”), 但是这些符号不是通过URI.escape转义的 我
require 'uri'
uri = URI.parse 'http://example.com'
我需要将一些路径合并到此URI
path = URI.escape('/?foo[123]=5')
uri.merge!(path)
以及获得异常:
URI::InvalidURIError: bad URI(is not URI?): /?foo[123]=5
这是因为路径中的某些符号被视为不安全(“[”和“]”),
但是这些符号不是通过URI.escape转义的
我正在使用两个URI.escape调用解决此问题:
path = URI.escape(URI.escape('/?foo[123]=5'), '[]')
uri.merge!(path)
问题是:为什么URI.escape在默认情况下不执行这种转义
或者有更好的方法吗?使用
CGI.escape
而不是URI.escape
:
require 'uri'
require 'cgi'
uri = URI.parse 'http://example.com'
path = CGI.escape('/?foo[123]=5')
uri.merge!(path) #=> #<URI::HTTP:0x00000002947918 URL:http://example.com/%2F%3Ffoo%5B123%5D%3D5>
require'uri'
需要“cgi”
uri=uri.parse'http://example.com'
path=CGI.escape('/?foo[123]=5')
合并!(路径)#=>#
它的规格
检查
请注意,问号很可能应该保留为未编码。感谢您提供的链接,看起来URI.escape将被贬值。