2013-08-20 81 views
1

我試圖張貼網址與TIME_ZONE但我面臨着以下問題URL編碼(時區)(紅寶石)

在我的方法,我有:

base_url = "..." 
time_zone = "Alaska" # works 
#time_zone = "Pacific Time (US & Canada)" # doesn't work 
#time_zone = "Pacific%20Time%20(US%20%26%20Canada)" # doesn't work either 
#time_zone = "Pacific Time" # doesn't work 
@url = "#{base_url}?time_zone=#{time_zone}" 
@url = URI.encode(@url) 
... # connect here 

可用選擇time_zones在這裏http://developer.pagerduty.com/documentation/rest/types#timezone

如果我提供例如「阿拉斯加」,我得到的數據但我需要「太平洋時間(美國&加拿大)」,它不起作用。

我嘗試使用http://meyerweb.com/eric/tools/dencoder/來編碼我的URL,但它也不起作用。

還有什麼我沒有注意到?

編輯: 「太平洋時間」 無法正常工作或

回答

0

應該僅僅是:

time_zone = "Pacific%20Time" 

編輯:

的問題是使用

URI.encode(url) 

你想要的是URI.encode_www_form:

require 'uri' 

url = "http://www.example.com/time_zone=Pacific Time (US & Canada)&count=10" 
p URI.encode url 

query_string = URI.encode_www_form(
    [ 
    ["time_zone", "Pacific Time (US & Canada)"], 
    ["count", 10] 
    ] 
) 
p query_string 

--output:-- 
"http://www.example.com/time_zone=Pacific%20Time%20(US%20&%20Canada)" 
"time_zone=Pacific+Time+%28US+%26+Canada%29&count=10" 

在「美國&加拿大」部分的符號顯然需要進行轉義,但URI.encode未能做到這一點。我真的很驚訝,任何人都會在中間選擇一個帶有&的時區名稱。你確定「太平洋時間」本身不起作用嗎?例如,

"http://www.example.com/time_zone=Pacific%20Time" 

"http://www.example.com/time_zone=Pacific+Time" 

注意URI.encode_www_form實現www.w3.org規格:

http://www.w3.org/TR/html5/forms.html#url-encoded-form-data

,警告:

這種表單數據集編碼在很多方面都是異常的怪物,多年的執行事故和妥協的結果導致了一系列互操作性所必需的要求,但 絕不代表良好的設計實踐。特別是,讀者 被警告要密切注意涉及 編碼和字節序列之間重複(以及在某些情況下嵌套)轉換字符 之間的扭曲細節。

0

的問題是使用

"URI.encode(url)" 

這工作:

base_url = "..." 
time_zone = "Pacific%20Time%20(US%20%26%20Canada)" 
@url = "#{base_url}?time_zone=#{time_zone}" 
# @url = URI.encode(@url) # this made it not work! 
... # connect here 
+0

我添加了一些意見,我的答案,這也許能派上用場。 – 7stud

+0

我越想到它,我就越「知道」'(美國和加拿大)'部分只是該時區列表中的評論。否則,不熟悉美國時區的人不知道太平洋時間提及的國家。 – 7stud

+0

是的,這是我一開始想的,但它不是http://developer.pagerduty.com/documentation/rest/types#timezone – nevermind