Итак, некоторые пользователи нашей системы копируют и вставляют текст в мое приложение. В своих журналах я иногда замечаю это:
ArgumentError (invalid byte sequence in US-ASCII):
vendor/bundle/ruby/1.9.1/gems/activesupport-2.3.14/lib/active_support/core_ext/object/blank.rb:68:in `=~'
vendor/bundle/ruby/1.9.1/gems/activesupport-2.3.14/lib/active_support/core_ext/object/blank.rb:68:in `!~'
vendor/bundle/ruby/1.9.1/gems/activesupport-2.3.14/lib/active_support/core_ext/object/blank.rb:68:in `blank?'
vendor/bundle/ruby/1.9.1/gems/actionpack-2.3.14/lib/action_controller/response.rb:202:in `nonempty_ok_response?'
vendor/bundle/ruby/1.9.1/gems/actionpack-2.3.14/lib/action_controller/response.rb:188:in `handle_conditional_get!'
vendor/bundle/ruby/1.9.1/gems/actionpack-2.3.14/lib/action_controller/response.rb:141:in `prepare!'
vendor/bundle/ruby/1.9.1/gems/actionpack-2.3.14/lib/action_controller/base.rb:540:in `send_response'
vendor/bundle/ruby/1.9.1/gems/actionpack-2.3.14/lib/action_controller/base.rb:534:in `process'
vendor/bundle/ruby/1.9.1/gems/actionpack-2.3.14/lib/action_controller/filters.rb:606:in `process_with_filters'
vendor/bundle/ruby/1.9.1/gems/actionpack-2.3.14/lib/action_controller/base.rb:391:in `process'
vendor/bundle/ruby/1.9.1/gems/actionpack-2.3.14/lib/action_controller/base.rb:386:in `call'
vendor/bundle/ruby/1.9.1/gems/actionpack-2.3.14/lib/action_controller/routing/route_set.rb:438:in `call'
А вот детали запроса. Обратите внимание на недопустимые символы.
Parameters: {"attendee"=>{"segment"=>"Middle Market \xE2\x80\x93 West Region"}}
Проблема в том, что кодировки символов отключены. Мое приложение настроено для UTF-8, и я считаю, что они отправляют символы ASCII. Мне нужен способ отфильтровать это, чтобы я мог избежать вышеуказанной ошибки.
Обратите внимание, что ошибка возникает еще до того, как она попадает в мое приложение. Поэтому я предполагаю, что лучшим решением является промежуточное программное обеспечение Rack, которое фильтрует пользовательский ввод для обеспечения правильного кодирования.
Есть идеи, как лучше всего это сделать? Я на 100% в порядке, если недопустимые символы заменяются знаком вопроса. Или ответ отправляется обратно, говоря, что на вашем входе есть недопустимые символы. Прямо сейчас они просто получают общую ошибку, и при запросах ajax они ничего не получают.
Спасибо.