[#109403] [Ruby master Feature#18951] Object#with to set and restore attributes around a block — "byroot (Jean Boussier)" <noreply@...>

Issue #18951 has been reported by byroot (Jean Boussier).

23 messages 2022/08/01

[#109423] [Ruby master Misc#18954] DevMeeting-2022-08-18 — "mame (Yusuke Endoh)" <noreply@...>

Issue #18954 has been reported by mame (Yusuke Endoh).

10 messages 2022/08/04

[#109449] [Ruby master Feature#18959] Handle gracefully nil kwargs eg. **nil — "LevLukomskyi (Lev Lukomskyi)" <noreply@...>

Issue #18959 has been reported by LevLukomskyi (Lev Lukomskyi).

27 messages 2022/08/08

[#109456] [Ruby master Bug#18960] Module#using raises RuntimeError when called at toplevel from wrapped script — "shioyama (Chris Salzberg)" <noreply@...>

Issue #18960 has been reported by shioyama (Chris Salzberg).

15 messages 2022/08/09

[#109550] [Ruby master Feature#18965] Further Thread::Queue improvements — "byroot (Jean Boussier)" <noreply@...>

Issue #18965 has been reported by byroot (Jean Boussier).

14 messages 2022/08/18

[#109575] [Ruby master Bug#18967] Segmentation fault in stackprof with Ruby 2.7.6 — "RubyBugs (A Nonymous)" <noreply@...>

Issue #18967 has been reported by RubyBugs (A Nonymous).

10 messages 2022/08/19

[#109598] [Ruby master Bug#18970] CRuby adds an invalid header to bin/bundle (and others) which makes it unusable in Bash on Windows — "Eregon (Benoit Daloze)" <noreply@...>

Issue #18970 has been reported by Eregon (Benoit Daloze).

17 messages 2022/08/20

[#109645] [Ruby master Bug#18973] Kernel#sprintf: %c allows codepoints above 127 for 7-bits ASCII encoding — "andrykonchin (Andrew Konchin)" <noreply@...>

Issue #18973 has been reported by andrykonchin (Andrew Konchin).

8 messages 2022/08/23

[#109689] [Ruby master Misc#18977] DevMeeting-2022-09-22 — "mame (Yusuke Endoh)" <noreply@...>

Issue #18977 has been reported by mame (Yusuke Endoh).

16 messages 2022/08/25

[#109707] [Ruby master Feature#18980] Re-reconsider numbered parameters: `it` as a default block parameter — "k0kubun (Takashi Kokubun)" <noreply@...>

Issue #18980 has been reported by k0kubun (Takashi Kokubun).

40 messages 2022/08/26

[#109756] [Ruby master Feature#18982] Add an `exception: false` argument for Queue#push, Queue#pop, SizedQueue#push and SizedQueue#pop — "byroot (Jean Boussier)" <noreply@...>

Issue #18982 has been reported by byroot (Jean Boussier).

11 messages 2022/08/29

[#109773] [Ruby master Misc#18984] Doc for Range#size for Float/Rational does not make sense — "masasakano (Masa Sakano)" <noreply@...>

Issue #18984 has been reported by masasakano (Masa Sakano).

7 messages 2022/08/29

[ruby-core:109488] [Ruby master Feature#18822] Ruby lack a proper method to percent-encode strings for URIs (RFC 3986)

From: "sam.saffron (Sam Saffron)" <noreply@...>
Date: 2022-08-16 00:34:09 UTC
List: ruby-core #109488
Issue #18822 has been updated by sam.saffron (Sam Saffron).


Since we just finished working around a nightmare scenario here @byroot, I think it is rather instructive to see a real world problem

The problem: 

> You get something, that is probably a URL from somewhere and need to be able to make requests to it.

- It can have a unicode domain that needs to run through and IDN converter
- It can have unicode chars that need percent encoding
- It can be unescaped, or it can be escaped (and in weird case part escaped)


Ideally you want to normalize as well, so caching is "stronger" and does not break for identical URLs.


So we ended up with this monster and travesty, partly powered by base classes, partly powered by addressable, 100% hack.

https://github.com/discourse/discourse/blob/main/lib/url_helper.rb#L72-L105

 


----------------------------------------
Feature #18822: Ruby lack a proper method to percent-encode strings for URIs (RFC 3986)
https://bugs.ruby-lang.org/issues/18822#change-98656

* Author: byroot (Jean Boussier)
* Status: Open
* Priority: Normal
----------------------------------------
### Context

There are two fairly similar encoding methods that are often confused. 

`application/x-www-form-urlencoded` which is how form data is encoded, and "percent-encoding" as defined by [RFC 3986](https://www.rfc-editor.org/rfc/rfc3986).

AFAIK, the only way they differ is that "form encoding" escape space characters as `+`, and RFC 3986 escape them as `%20`. Most of the time it doesn't matter, but sometimes it does.

### Ruby form and URL escape methods

  - `URI.escape(" ") # => "%20"` but it was deprecated and removed (in 3.0 ?).
  - `ERB::Util.url_encode(" ") # => "%20"` but it's implemented with a `gsub` and isn't very performant. It's also awkward to have to reach for `ERB`
  - `CGI.escape(" ") # => "+"`
  - `URI.encode_www_form_component(" ") # => "+"`

### Unescape methods

For unescaping, it's even more of a clear cut since `URI.unescape` was removed. So there's no available method that won't treat an unescaped `+` as simply `+`.

e.g. in Javascript: `decodeURIComponent("foo+bar") #=> "foo+bar"`.

If one were to use `CGI.unescape`, the string might be improperly decoded: `GI.unescape("foo+bar") #=> "foo bar"`. 

### Other languages

  - Javascript `encodeURI` and `encodeURIComponent` use `%20`.
  - PHP has `urlencode` using `+` and `rawurlencode` using `%20`.
  - Python has `urllib.parse.quote` using `%20` and `urllib.parse.quote_plus` using `+`.

### Proposal

Since `CGI` already have a very performant encoder for `application/x-www-form-urlencoded`, I think it would make sense that it would provide another method for RFC3986.

I propose:

   - `CGI.url_encode(" ") # => "%20"`
   - Or `CGI.encode_url`.
   - Alias `CGI.escape` as `GCI.encode_www_form_component`
   - Clarify the documentation of `CGI.escape`.





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

In This Thread