😎

[Bug #20690] URI.encode_www_form_component がチルダをエスケープしてしまうバグ報告

2024/11/23に公開

[Bug #20690] URI.encode_www_form_component method escapes tilde when it's not supposed to

  • URI.encode_www_form_component がチルダ(~) をエスケープしてしまっているバグ報告
    • RFC3986 の規格ではチルダ(~)をエスケープしない仕様みたい
  • URI.encode_www_form_component 以外の CGI.escapeERB::Util.#url_encode なんかはエスケープされないみたいですね
require "uri"
pp URI.encode_www_form_component("ruby~test")
# => "ruby%7Etest"


require "cgi"
pp CGI.escape("ruby~test")
# => "ruby~test"


require "erb"
pp ERB::Util.url_encode("ruby~test")
# => "ruby~test"
  • これなんですが URI.encode_www_form_component は RFC3986 ではなくて『HTML のフォーム送信用に設計されている』のでこういう挙動になっているみたいですね
  • なのでこのチケット自体は Reject されているんですが `URI.encode_uri_component でも同様の問題があるらしくこっちを対応する話もでているみたいですね
require "uri"

pp URI.encode_uri_component("ruby~test")
# => "ruby%7Etest"
GitHubで編集を提案

Discussion