convertUrlStringToParameterの仕様変更
symfony 1.0.16で動作してたアプリが1.0.17だと動かなくなってたページがあったので調べてみると、原因はconvertUrlStringToParameter関数の仕様が変わってるのが原因ぽかった。(該当チケット)
convertUrlStringToParameterが定義されてるファイルは/sf_symfony_lib_dir/controller/sfWebController.class.phpです。
convertUrlStringToParameterの1.0.16と1.0.17のdiff (190行目付近)
<?php foreach ($matches as $match) { - $params[$match[1][0]] = $match[2][0]; + $params[urldecode($match[1][0])] = urldecode($match[2][0]); }
sfRoutingでパラメータ展開時にurldecode処理があるかないかの違いになります。
ここでurldecodeするようになったので、「/」や「+」文字列をパラメータとして渡せなくなって上手くルーティングが出来なくなってしまったのが不具合の原因みたいです。
最初はfilterやcontrollerでなんとか出来るかなぁ、と思ってましたがよく考えたらrouting処理って、それらより先に実行されてしまうので無理でした。
解決案
少し強引ですが、「%」文字自体もURLエンコードしちゃって、デコード関数には「%」文字をデコードさせるような処理で対応しました。
処理例
「Class 2/35 ZF」という文字列だと「Class+2%252F35+ZF」という文字列に変換してます。