質問: お世話になっております。 現在,データベースにGETでレコードの問い合わせに関するバグが発生したと問い合わせを受けたため, 原因を調査したところ。GETメソッドでのクエリパラメータのvalueの指定に&が入っている文字列が あり,リクエスト先のアクションにブレイクポイントを設定して,調べたところ,&の位置で,key,value ペアができてしまい,得たいhashに整形できていないことがわかりました。 以下出力をダミーで送ります。 ``` #http://hoge.com/?item="tiger&bunny":get def action puts params #=> {item=>"tiger",bunney:nil} puts params["item"] #=> "tiger" end ``` railsだと,URLエンコードするという方法で&として,解釈されるようにすることができたのですが, これはrailsだから自動でdecodeされるのですか? というのも,記事を調べると,自分で明示的にデコードするようなものが多かったため,気になりました。 また,リクエストパラメータのメタ文字を文字列として扱いたい場合,urlencodeするという対処法は正しいでしょうか? よろしくお願いします。
回答: GET, POST関わらず、リクエストパラメータはURLエンコードするものだと思いますよ。 タグの ecntype を特に指定しないと `application/x-www-form-urlencoded` になるので サブミットすると勝手にURLエンコードされます。 Ajaxで飛ばすのであれば、自前でURLエンコードしないといけないっぽいですね。 JavaScript では、`encodeURI` と `encodeURIComponent` で挙動が違うので、 注意が必要です。 デコードは必ず誰かがする必要があります。 Webサーバーなどが勝手にやってくれる事が多く、透過的に扱えているので、 自分ですることは少ないかもしれませんね。