我正在尝试使用time_zone发布网址,但我遇到了以下问题
在我的方法中,我有:
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/对我的网址进行编码,但它也不起作用。
还有什么我不注意的?
编辑:“太平洋时间”不起作用
答案 0 :(得分: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"
“US& Canada”部分中的&符号显然需要进行转义,但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
警告:
这种表单数据集编码在很多方面都是异常的怪异, 多年实施事故和妥协的结果 导致互操作性所需的一系列要求,但是 绝不代表良好的设计实践。特别是读者 提醒要密切注意涉及的扭曲细节 重复(在某些情况下嵌套)字符之间的转换 编码和字节序列。
答案 1 :(得分: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