11155
(-- --)
May 25, 2013, 11:58am
1
URL normalization :- URI normalization - Wikipedia - I
just read this source.
I found a method uri#normalization :
But not able to figure out how this method works:
require 'uri'
uri = URI.parse("http://www.example.com/../a/b/../c/./d.html"\ )
p uri.normalize.to_s
#=> "http://www.example.com/../a/b/../c/./d.html" ;
But I expect " http://www.example.com/a/c/d.html" ;
Nothing any thing change encountered. So any one out there have any good
example to understand this method?
Thanks
Quickest way is to read the source (available from the ‘click to toggle source’ link you get when hovering over a method):
def normalize!
if path && path == ‘’
set_path(‘/’)
end
if scheme && scheme != scheme.downcase
set_scheme(self.scheme.downcase)
end
if host && host != host.downcase
set_host(self.host.downcase)
end
end
looks like the idea is to handle the following oddly-formatted sorts of URIs:
http://example.com (no trailing /)
HttP://example.com/ (protocol capitalized oddly)
http://EXAMPLE.com/ (host capitalized)
If your goal is to normalize out those …s in your path, File.expand_path may be more what you’re looking for:
File.expand_path(‘/no/such/path/…/srsly’) # => returns “/no/such/srsly”
But really, including … in a URI isn’t entirely valid - not all structures exposed via URI are filesystems, after all…
–Matt Jones
11155
(-- --)
May 26, 2013, 5:32pm
3
Matt Jones wrote in post #1110185:
Quickest way is to read the source (available from the 'click to toggle
source' link you get when hovering over a method):
def normalize!
if path && path == ''
set_path('/')
end
if scheme && scheme != scheme.downcase
set_scheme(self.scheme.downcase)
end
if host && host != host.downcase
set_host(self.host.downcase)
end
end
looks like the idea is to handle the following oddly-formatted sorts of
URIs:
http://example.com (no trailing /)
HttP://example .com/ (protocol capitalized oddly)
http://EXAMPLE.com/ (host capitalized)
Thanks @matt ! I am happy to see this.