「/protégés/:id」へのルーティングで同様の問題が発生していました。Rackメーリングリストに投稿しましたが、反応は良くありませんでした。
私が思いついた解決策は完璧ではありませんが、ほとんどの場合は機能します。まず、UTF-8をエンコード解除するミドルウェアを作成します。
# in lib/fix_unicode_urls_middleware.rb:
require 'cgi'
class FixUnicodeUrlsMiddleware
ENVIRONMENT_VARIABLES_TO_FIX = [
'PATH_INFO', 'REQUEST_PATH', 'REQUEST_URI'
]
def initialize(app)
@app = app
end
def call(env)
ENVIRONMENT_VARIABLES_TO_FIX.each do |var|
env[var] = CGI.unescape(env[var]) if env[var] =~ /%[A-Za-z0-9]/
end
@app.call(env)
end
end
次に、そのミドルウェアをconfig/environment.rb
(Rails 2.3)またはconfig/application.rb
(Rails 3)で使用します。
また、正しいエンコーディングHTTPヘッダーを設定していることを確認する必要があります。
Content-type: text/html; charset=utf-8
サイトで使用するさまざまなエンコーディングの数に応じて、Rails、Rack、またはWebサーバーで設定できます。