- 2014/01/22 Wed
-
パーセントエンコーディングしたパラメータを渡すとRailsのルーティングで処理されずに404になるのはなんでなんだぜと思っていたのが昨晩の話。
テストデータに軒並み「%2F」か「%2E」が含まれていたせいでした。
ああ。(※1)※1)%2Fは"/"、%2Eは"."で、どちらも標準のセパレータ。そのままではパラメータとして扱われない。メモ routesについて - いしかきの日記
http://d.hatena.ne.jp/gakkiy/20080117/1200534547routesで定義するルーティングのパラメータに区切り文字が入っている場合の対応方法Rails3.2 でWebアプリケーションを作成
http://merrill777.blog135.fc2.com/page-4.htmlデフォルトでは、:id パラメータはドットを受け付けません。これは、ドットがルートのセパレーターとして使われるためです。もし:id にドットを含めたい場合は、これをオーバーライドする制約を追加します。
あたりを参考にアレコレしたみたけど思うように処理されず。
使用しているバージョンの問題か。
ならセパレータ文字が含まれないように処理するかーとURLセーフなBase64にエンコードしようとしたら、urlsafe_encode64どころかstrict_encode64すら使えなかったのでカッフン。
仕方ないのでurlsafe_encode64相当の処理を書いたら想定していた動作をするようになったけど、ちょっとなーと。