it-swarm.com.ru

Разбор строки для добавления в URL-кодировку URL

Учитывая строку:

"Hello there world"

как я могу создать строку в кодировке URL, как это:

"Hello%20there%20world"

Я также хотел бы знать, что делать, если в строке есть и другие символы, например:

"hello there: world, how are you"

Какой самый простой способ сделать это? Я собирался разобрать, а затем создать код для этого.

61
Mohamed El Mahallawy
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"
110
Arie Xiao

Ruby's 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

Если кому-то интересно, самый новый способ сделать это в ERB:

    <%= u "Hello World !" %>

Это сделает:

Привет% 20World% 20% 21

u - это сокращение от url_encode

Вы можете найти документы здесь

12
oschvr

В то время как текущий ответ говорит об использовании URI.encode, который устарел и устарел с Ruby 1.9.2. Лучше использовать CGI.escape или ERB::Util.url_encode.

11
Benjamin