我的应用程序允许用户输入文本。当他们从 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 与这些字符不兼容...?

谢谢。

最佳答案

您可以添加一个 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

对于奖励积分,您还可以使用方便的 rails changed 检查字段是否更改?修复之前的助手。

关于ruby-on-rails - 在 Rails 3 中替换智能引号、智能撇号和省略号的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7248457/

10-12 15:34