Строковое кодирование через ruby: безопасный ввод данных пользователем - PullRequest
5 голосов
/ 22 февраля 2011

Я искал все выше и ниже для простого решения.Ни одно из них не было простым или «просто сработало».

Для начала я получаю эту ошибку:

ArgumentError: invalid byte sequence in US-ASCII

Это происходит потому, что пользователи копируют и вставляют содержимое из Microsoft Word.Мне просто нужен способ обезопасить вводимые пользователем данные, чтобы они сохранялись в базе данных в правильном формате, независимо от того, в каком формате они мне отправляют.Даже если это полностью разрушит их вклад, меня это не касается.Я просто хочу принудительно закодировать их ввод во что-то, что не будет жаловаться позже.

Я пытался:

ic = Iconv.new('US-ASCII//IGNORE', 'US-ASCII')
safe_string = ic.iconv(unsafe_string)

После выполнения вышеизложенного и сохранения новой строки, ошибка все ещесохраняется.Я пытался

safe_string = unsafe_string.force_encoding('US-ASCII')

По-прежнему выдает ошибки.

Я также пробовал выше с UTF-8.То же самое.

Разве я не могу сделать что-то простое, чтобы правильно преобразовать их строку перед ее сохранением в базе данных?Благодаря.

1 Ответ

1 голос
/ 22 февраля 2011

Я думаю, что нашел решение сам.Итак, если вы хотите принудительно закодировать строку в текущую кодировку, вы можете сделать что-то вроде:

safe_string = unsafe_string.encode('US-ASCII', :undef => :replace)

Но на самом деле, я бы порекомендовал использовать UTF-8.Я не уверен, почему моя кодировка по умолчанию была установлена ​​в US-ASCII, я предположил, что rails установил значение по умолчанию в UTF-8.В любом случае, выполнение следующих действий также решило проблему:

Encoding.default_internal = 'UTF-8'
Encoding.default_external = 'UTF-8'

Это было помещено в инициализатор.Если у кого-нибудь есть предложения получше, пожалуйста, дайте мне знать.Но я считаю, что UTF-8 является самой популярной кодировкой, и я читал, что на нескольких сайтах это была рекомендуемая кодировка.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...