Ruby URI 合并和转义

3
我有一个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转义。
我使用两个URI.escape调用来解决这个问题。
path = URI.escape(URI.escape('/?foo[123]=5'), '[]')
uri.merge!(path)

问题是:为什么URI.escape默认情况下不执行转义?
或者有更好的方法吗?
2个回答

1

使用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>

2
请注意,问号很可能不应该被编码。 - Phrogz

1

谢谢您提供的链接,看起来URI.escape将被弃用。 - taro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接