Итак, некоторые пользователи нашей системы копируют и вставляют текст в мое приложение. В своих журналах я иногда замечаю следующее:
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 ничего не получают.
Спасибо.