web-dev-qa-db-ja.com

URLエンコードされたURLに追加する解析文字列

与えられた文字列:

"Hello there world"

このようにURLエンコードされた文字列を作成するにはどうすればよいですか:

"Hello%20there%20world"

また、次のような文字列に他の記号が含まれている場合の対処方法も知りたいです。

"hello there: world, how are you"

そうする最も簡単な方法は何ですか?解析してから、そのためのコードをビルドします。

63
require 'uri'

URI.encode("Hello there world")
#=> "Hello%20there%20world"
URI.encode("hello there: world, how are you")
#=> "hello%20there:%20world,%20how%20are%20you"

URI.decode("Hello%20there%20world")
#=> "Hello there world"
115
Arie Xiao

Rubyの [〜#〜] uri [〜#〜] はこれに役立ちます。 URL全体をプログラムで構築し、そのクラスを使用してクエリパラメーターを追加すると、エンコードが処理されます。

require 'uri'

uri = URI.parse('http://foo.com')
uri.query = URI.encode_www_form(
  's' => "Hello there world"
)
uri.to_s # => "http://foo.com?s=Hello+there+world"

例は便利です。

URI.encode_www_form([["q", "Ruby"], ["lang", "en"]])
#=> "q=Ruby&lang=en"
URI.encode_www_form("q" => "Ruby", "lang" => "en")
#=> "q=Ruby&lang=en"
URI.encode_www_form("q" => ["Ruby", "Perl"], "lang" => "en")
#=> "q=Ruby&q=Perl&lang=en"
URI.encode_www_form([["q", "Ruby"], ["q", "Perl"], ["lang", "en"]])
#=> "q=Ruby&q=Perl&lang=en"

これらのリンクも役に立つかもしれません:

16
the Tin Man

現在の回答では、Ruby 1.9.2。から廃止され廃止されたURI.encodeを使用するようになっています。CGI.escapeまたはERB::Util.url_encodeを使用することをお勧めします。

14
Benjamin

誰かが興味を持っている場合、これを行うための最新の方法はERBでやっています:

    <%= u "Hello World !" %>

これによりレンダリングされます:

Hello%20World%20%21

uurl_encodeの略です

ドキュメントを見つけることができます こちら

13
oschvr