😎
[Bug #20690] URI.encode_www_form_component がチルダをエスケープしてしまうバグ報告
[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.escape
やERB::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"
Discussion