У меня возникла проблема с копированием и вставкой пользователей, что приводит к непечатаемым символам, которые не позволяют MySQL сохранять записи. Вот ошибка:Как я могу отделить непечатаемые символы юникода от ввода пользователя в Rails 4?
Mysql2::Error: Incorrect string value: '\xE2\x80\x8B\xE2\x80\x8B...' for column 'address' at row 1
Я не нахожу существующие ответы на подобные вопросы удовлетворительными, так как они, кажется, все требуют от меня, чтобы изменить базу данных, чтобы принять эти символы Юникода. Но я не хочу спасать этих персонажей! Я бы скорее их вычеркнул и сохранил действительные символы ASCII.
Каков наилучший/предпочтительный способ сделать это? До сих пор я наткнулся на следующие методы:
"offending string".encode(Encoding.find('ASCII'), {invalid: :replace, undef: :replace, replace: "", universal_newline: true})
Это, кажется, работает большую часть времени, за исключение того, чтобы компенсировать нулевые поля я должен использовать трехкомпонентное выражение на каждое поле. Серьезный запах кода!
Тогда это:
.gsub(/(\W|\d)/, "")
Что делает часть того, что я хочу, но он также удаляет символы, такие как кавычки.
Я бы предпочел настройку, которую я могу изменить, а не прикоснуться к вызовам метода к моим параметрам.