我有一個請求發送到一個URL這個代碼,我想把它放到鏈接兩個變量:如何在URL中插入變量?
talksList = open('http://yolo.com/?action=cp_list&id=#{variable1}&key=#{variable2}')
但是當我插入我的變量就是這樣,這是行不通的。你可以幫我嗎 ?
在此先感謝。
我有一個請求發送到一個URL這個代碼,我想把它放到鏈接兩個變量:如何在URL中插入變量?
talksList = open('http://yolo.com/?action=cp_list&id=#{variable1}&key=#{variable2}')
但是當我插入我的變量就是這樣,這是行不通的。你可以幫我嗎 ?
在此先感謝。
這是因爲您使用帶單引號的字符串。在單引號字符串中,除\\
和\'
之外沒有任何內容被替換。
具體來說,插補僅在雙引號中的字符串,請嘗試
talksList = open("http://yolo.com/?action=cp_list&id=#{variable1}&key=#{variable2}")
正如@YuHao說,你想給一個變量插值到非解釋字符串。但是你有更大的長期問題。
不要嘗試將未編碼的變量注入到URL中。雖然它可以工作,但是你冒着生成無意義的URL的風險,瀏覽器可以接受,但代碼不會。相反,請使用適當的工具來修改網址,以便爲您保留適當的編碼。
下面是一個使用URI一個例子:
require 'uri'
variable1 = 'foo'
variable2 = 'bar'
uri = URI.parse('http://yolo.com/?action=cp_list')
params = URI.decode_www_form(uri.query)
params << ['id', variable1]
params << ['key', variable2]
uri.query = URI.encode_www_form(params)
uri.to_s # => "http://yolo.com/?action=cp_list&id=foo&key=bar"
你可以使用Addressable的寶石,這是一回事功能更全面:
require 'addressable/uri'
variable1 = 'foo'
variable2 = 'bar'
uri = Addressable::URI.parse('http://yolo.com/?action=cp_list')
params = uri.query_values
uri.query_values = params.merge('id' => variable1, 'key' => variable2)
uri.to_s # => "http://yolo.com/?action=cp_list&id=foo&key=bar"
它是在進步,但還有另一種問題:我正確設置了兩個變量,但是irb表示它們未定義。但是,當我打印它們時,該值是正確的。 – Vinm 2014-09-30 11:39:12
@Vinm這是一個不同的問題,然後問一個不同的問題(經過一些研究)。 – 2014-09-30 11:42:49