我有一个简单的问题:用户可以通过特定输入在我的网站中以特定形式发布网址。我想对发布的网址进行编码,因为有时用户会发送带有奇怪和/或非ASCII字符的网址(例如éàç...)。例如:https://www.example.com/url-déjà-vu
因此,我尝试使用URI.escape('https://www.example.com/url-déjà-vu')哪种方法有效,但是如果您具有以下网址,URI.escape('https://somesite.com/page?stuff=stuff&%20')则会得到:
=> "https://somesite.com/page?stuff=stuff&%2520"
%字符已编码,不应如此,因为%20已经是编码字符。然后我以为我可以这样做:
URI.escape(URI.decode('https://somesite.com/page?stuff=stuff&%20'))
=> "https://somesite.com/page?stuff=stuff&%20"
Run Code Online (Sandbox Code Playgroud)
但是,如果您的网址中带有“ /”编码,则存在问题,例如:
URI.escape(URI.decode('http://example.com/a%2fb'))
=> "http://example.com/a/b"
Run Code Online (Sandbox Code Playgroud)
“ /”应保持编码状态。
所以...全部放在一起:我想对用户发布的url进行编码,但在ruby中将已经编码的字符保留不变。知道我该怎么做而不会头疼吗?
谢谢 :)