我需要清理用户输入中的各种 Word“智能”字符,包括但不限于以下内容:
– EN DASH
‘ LEFT SINGLE QUOTATION MARK
’ RIGHT SINGLE QUOTATION MARK
是否有任何 Ruby 函数或库可以将它们映射到它们的 ASCII(接近)等价物,还是我真的需要做一堆手动 gsub?
我需要清理用户输入中的各种 Word“智能”字符,包括但不限于以下内容:
– EN DASH
‘ LEFT SINGLE QUOTATION MARK
’ RIGHT SINGLE QUOTATION MARK
是否有任何 Ruby 函数或库可以将它们映射到它们的 ASCII(接近)等价物,还是我真的需要做一堆手动 gsub?
HTMLEntities gem会将实体解码为 UTF-8。
您可以使用iconv音译为最接近的 ASCII 等价物或简单的gsub
ortr
调用。James Gray 有一些关于在各种字符集之间转换的博客,展示了如何进行音译。
require 'htmlentities'
chars = [
'–', # EN DASH
'‘', # LEFT SINGLE QUOTATION MARK
'’' # RIGHT SINGLE QUOTATION MARK
]
decoder = HTMLEntities.new('expanded')
chars.each do |c|
puts "#{ c } => #{ decoder.decode(c) } => #{ decoder.decode(c).tr('–‘’', "-'")} => #{ decoder.decode(c).encoding }"
end
# >> – => – => - => UTF-8
# >> ‘ => ‘ => ' => UTF-8
# >> ’ => ’ => ' => UTF-8
一些 gsubs 听起来是最好的选择,特别是如果您打算加载整个额外的库来做基本相同的事情。