From: shyouhei@...
Date: 2020-11-09T02:28:09+00:00
Subject: [ruby-core:100752] [Ruby master Misc#17309] URI.escape being deprecated, yet there is no replacement

Issue #17309 has been updated by shyouhei (Shyouhei Urabe).


"But my browser can take UTF-8 URLs!", you might wonder.  The reality is they no longer honour what RFCs say.  Modern browsers follow other standard https://url.spec.whatwg.org/ which has a very clear language that the URL they define must accept UTF-8.  As far as browsers go with WHATWG URL, there is no need for escapnig to creep in.

----------------------------------------
Misc #17309: URI.escape being deprecated, yet there is no replacement
https://bugs.ruby-lang.org/issues/17309#change-88399

* Author: chucke (Tiago Cardoso)
* Status: Open
* Priority: Normal
----------------------------------------
I'm on ruby 2.7.2 . The moment I do

```ruby
uri = "http://b�cher.ch"
URI.escape uri
(irb):5: warning: URI.escape
"http://b%C3%BCcher.ch"
```

I get that warning. Rubocop also tells me:

"""
URI.escape method is obsolete and should not be used. Instead, use CGI.escape, URI.encode_www_form or URI.encode_www_form_component depending on your specific use case.
"""

However, none of the suggestions does the same as `URI.escape`.

```ruby
CGI.escape uri
=> "http%3A%2F%2Fb%C3%BCcher.ch"
URI.encode_www_form_component uri
=> "http%3A%2F%2Fb%C3%BCcher.ch"
 URI.encode_www_form uri
Traceback (most recent call last):
NoMethodError (undefined method `map' for "http://b�cher.ch":String)
Did you mean?  tap
```

So my question is: why is this being deprecated? And if there's still reason, what to exactly replace it for, so I can keep the exact same behaviour?



-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>