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

发布于 2024-12-02 07:28:29 字数 382 浏览 0 评论 0原文

我的应用程序允许用户输入文本。当他们从 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': UTF-8 中的无效字节序列 ( ArgumentError)...显然 redgreen gem 与这些字符不兼容...?

谢谢。

My application allows the user to enter text. When they copy and paste from MS Word, it pastes smart quotes, smart apostrophes and ellipsis. These characters get saved into the database and cause problems. What is the best way to replace these non-UTF-8 characters with normal quotes("), apostrophe(') and periods(...)?

Also, how do you test this functionality? I added a test with these special characters and # encoding: ISO-8859-1 at the top of the file. The special characters caused the tests stop running: /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)...Apparently redgreen gem is incompatible with these characters...?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

国际总奸 2024-12-09 07:28:29

您可以添加 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 Handy Changed 进行了更改?修复之前的帮助者。

you can add a before_save method that will convert your text to UTF-8 corresponding characters. if you have just 1 field that might contain non-UTF8 chars then its simple, if you have many fields then it would be better if you dynamically iterate over changed text/string fields and fix UTF-8 problem. Either way you need to use String#encode. Here is an example

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

And for bonus points you can also check if the field was changed using rails handy changed? helpers before fixing it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文