RubyのCGI.escapeとURI.encodeについて


RubyのCGI.escapeURI.encodeはどちらもURIエンコードを行うためのメソッドです。基本的にはCGI.escapeを使うことが推奨されていますが、これまでのしくみと仕様を合わせたい場合もあるので、簡単に違いをまとめておきます。

🚜 CGI.escape

CGI.escapeでは次のようにエスケープされます。

require 'cgi'

CGI.escape('A B C') #=> "A+B+C"
CGI.escape("http://example.com/hoge/あいう/") #=> => "http%3A%2F%2Fexample.com%2Fhoge%2F%E3%81%82%E3%81%84%E3%81%86%2F"

CGI.escapeはCGIの仕様にもとづいてデータをエンコード、デコードするためのメソッドです。

🎂 URI.encode

URI.encodeでは次のようにエスケープされます。

require 'uri'

URI.encode('A B C') #=> "A%20B%20C"
URI.encode("http://example.com/hoge/あいう/") #=> "http://example.com/hoge/%E3%81%82%E3%81%84%E3%81%86/"

ただし、RFC-3896の仕様に準拠できているわけではないので注意が必要です。

🐮 CGI.escapeとURI.encodeの違い

  • URI.encodeはバックスラッシュ等は変換しない。CGI.escapeはすべてエスケープ

🐯 [補足]RFC-3896に準拠:Addressable

RFC-3896、RFC-3987、RFC-6570に準拠する場合は、「Addressable」を使うと良さそうです。

require "addressable/uri"

uri = Addressable::URI.parse("http://www.詹姆斯.com/")
uri.normalize
#=> #

🐹 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍