Rails2.3 ではURL中の ; はパラメターの区切りに解釈されるようだ

Rails2.3にポートしたアプリに思わぬバグが発生したので調べたところ、URL中の ; (セミコロン)の解釈が従来と変わったようです。

  • Rails2.1.2
GET http://localhost/redirects/887308412?a=3;b=2 の場合
Parameters: {"a"=>"3;b=2", "action"=>"show", "id"=>"887308412", "controller"=>"redirects"}
  • Rails2.3.2
GET http://localhost/redirects/887308412?a=3;b=2 の場合
Parameters: {"a"=>"3", "b"=>"2", "action"=>"show", "id"=>"887308412", "controller"=>"redirects"}


検索してみると URI属性値のセミコロン記号: ナマズのブログによると W3Cは フォームの項目区切りに「&」の代用としての「;」をサポートするよう推奨しているようです。

Rails2.3(たぶんRack)はそう解釈するんですね。