при попытке доступа на адрес с добавленным %d0 в конце урла вызывал:
A PGError occurred in news_posts#index:а искаверканный третьей стороной урл, приходивший, например в koi8-r вызывал
incomplete multibyte character
activerecord (3.0.9) lib/active_record/connection_adapters/postgresql_adapter. rb:362:in `escape_string'
самое смешное, с этой проблемой сталкиваются нечасто, и я, быть может, первый, потому как любая ошибка 500 приходит мне на мылоA ActionView::Template::Error occurred in news_posts#show:
invalid byte sequence in UTF-8
actionpack (3.0.9) lib/action_dispatch/routing/route_set.rb:418:in `split'
поэтому лекарство пришлось делать самому:
app/middleware/utf_fixer.rb
require 'rack/utils'и где-нибудь в инициализаторах нечто вроде
require 'iconv'
class UtfFixer
def initialize(app)
@app = app
end
def call(env)
request = Rack::Request.new(env)
env['REQUEST_URI'] = my_converter(env['REQUEST_URI'])
env['PATH_INFO'] = my_converter(env['PATH_INFO'])
@app.call(env)
end
def my_converter(string)
Iconv.new('UTF-8//IGNORE', 'UTF-8').iconv(Rack::Mount::Utils.unescape_uri(string) + ' ')[0..-3]
end
end
Rails.application.config.middleware.insert_before(
ActionDispatch::Session::CookieStore,
UtfFixer)