2013-06-29 8 views
44

Với chuỗi:chuỗi Parsing để thêm vào URL được mã hóa URL

"Hello there world" 

làm thế nào tôi có thể tạo ra một chuỗi URL mã hóa như thế này:

"Hello%20there%20world" 

Tôi cũng muốn biết những gì để nếu chuỗi có các ký hiệu khác quá, như:

"hello there: world, how are you" 

Cách dễ nhất để làm như vậy là gì? Tôi sẽ phân tích và sau đó xây dựng một số mã cho điều đó.

Trả lời

82
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" 
+3

Nếu bạn cũng muốn mã hóa dấu chấm: 'URI.encode ('api.example.com',/\ W /)' – Dennis

14

Ruby's URI hữu ích cho việc này. Bạn có thể xây dựng toàn bộ URL lập trình và thêm tham số truy vấn sử dụng lớp đó, và nó sẽ xử lý mã hóa cho bạn:

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" 

Các ví dụ rất hữu ích:

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" 

Các liên kết này cũng có thể là hữu ích:

+0

Làm thế nào tôi có thể nhúng các require 'uri' vào html.erb? Hay tôi phải đặt nó vào bộ điều khiển? –

+2

Điều phải làm, bất cứ lúc nào có nhiều hơn logic tầm thường cần thiết, là làm tất cả các "computin" "trong bộ điều khiển. –

+0

Tuyệt. Khi nào chúng ta nên sử dụng người trợ giúp? Và điều gì sẽ xảy ra nếu chúng ta thực hiện tính toán được sử dụng ở nhiều nơi trong bộ trợ giúp và bao gồm cho các bộ điều khiển. Nó có quan trọng không? –

4

Nếu có ai quan tâm, cách mới nhất để làm điều này đang làm trong ERB:

<%= u "Hello World !" %> 

Điều này sẽ làm cho:

Xin chào% 20World% 20% 21

u viết tắt của url_encode

Bạn có thể tìm thấy các tài liệu here

+1

Điểm thưởng để cập nhật câu trả lời cũ với các phương pháp mới! – cabgfx