Как лучше всего заменить умные цитаты, умный апостроф и многоточие в Rails 3? - PullRequest
4 голосов
/ 30 августа 2011

Мое приложение позволяет пользователю вводить текст.Когда они копируют и вставляют из MS Word, он вставляет умные кавычки, умные апострофы и многоточие.Эти символы сохраняются в базе данных и вызывают проблемы.Каков наилучший способ заменить эти символы не-UTF-8 обычными кавычками ("), апострофом (') и точками (...)?

Кроме того, как вы тестируете эту функциональность?тест с этими специальными символами и # encoding: ISO-8859-1 вверху файла. Специальные символы привели к тому, что тесты перестали выполняться: /home/george/.rvm/gems/ruby-1.9.2-p180/gems/redgreen-1.2.2/lib/redgreen.rb:62:in 'sub': invalid byte sequence in UTF-8 (ArgumentError) ... Очевидно, что redgreen gem несовместим с этими символами ...?Спасибо.

1 Ответ

0 голосов
/ 10 апреля 2012

вы можете добавить метод before_save, который преобразует ваш текст в соответствующие символы UTF-8. если у вас есть только 1 поле, которое может содержать символы не-UTF8, тогда все просто, если у вас много полей, было бы лучше, если бы вы динамически перебирали измененные текстовые / строковые поля и исправляли проблему UTF-8. В любом случае вам нужно использовать String # encode . Вот пример

before_save :fix_utf8_encoding

def fix_utf8_encoding
  columns = self.class.columns.select{|col| [:text,:string].include?(col.type)}.map{|col| col.name.to_sym}
  columns.each do |col|
    self[col] = self.self[col].encode('UTF-8', :invalid => :replace, :undef => :replace) if self[col].kind_of?(String) #Double checking just in case.
  end
end
private :fix_utf8_encoding

А для бонусных баллов вы также можете проверить, было ли изменено поле с помощью измененных рельсов? помощники, прежде чем это исправить.

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