4

通常、レールは魔法のようにすべてをデコードしますparamsparams="value="+encodeURIComponent('ab#cd');これで、実行してから呼び出すJavaScriptを取得しましたhttp://server/controller?value=ab%23cdparams[:value]コントローラーでアクセスすると、期待どおりab%23cdではなく、含まれています。ab#cd

これを解決する方法は?Railsがこのパラメータの自動デコードを行わないのはなぜですか?

4

1 に答える 1

5

Rails は、次のロジックでパラメーターを「自動的に」処理します。

リクエストが GET の場合、クエリ文字列内のすべてをデコードします。

GET http://server/controller?value=ab%23cd
  On the server this will generate params['value'] as ab#cd

リクエストがクエリ文字列を含む POST の場合、デコードされません。

POST http://server/controller?value=ab%23cd
  On the server this will generate params['value'] as ab%23cd

リクエストがデータ パラメーターを含む POST の場合、それをデコードします。

POST http://server/controller
  data: value=ab%23cd
  On the server this will generate params['value'] as ab#cd

POSTリクエストではなくリクエストにクエリ文字列を含めているGETため、Rails がクエリ文字列をデコードしていないため、この問題が発生していると思われます。

于 2013-06-28T14:49:09.773 に答える