在Rails 3中替换智能引号、智能撇号和省略号的最好方法是什么?



我的应用允许用户输入文本。当他们从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)…显然红绿宝石与这些角色不相容…?

谢谢。

您可以添加一个before_save方法,该方法将文本转换为UTF-8对应的字符。如果你只有一个可能包含非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更改?

最新更新