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 をエンコードしようとしましたが、うまくいきません。

私が注意を払っていないことは他にありますか?

編集:「太平洋時間」も機能しません

4

2 に答える 2

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

警告:

このフォーム データ セット エンコーディングは、多くの点で異常な怪物であり、相互運用性に必要な一連の要件につながる長年の実装上の事故と妥協の結果ですが、決して優れた設計慣行を表すものではありません。特に、読者は、文字エンコーディングとバイト シーケンス間の変換の繰り返し (場合によってはネストされた) を含むねじれた詳細に細心の注意を払うように警告されます。

于 2013-08-20T21:39:35.247 に答える
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
于 2013-08-20T22:28:57.943 に答える