"U+2010" != "-"(或者:使用 Rails 和 Postgresql 处理复制/粘贴的 unicode 字符)



我有一个支持postgresql 9.3的Rails 3.2/Ruby 2.0应用程序。

人们将"PS-3002S-BK"等字符串复制/粘贴到Web表单中。连字符为"U+2010"。数据以 utf-8 的形式保存到 postgresql 中。

然后,当他们搜索"PS-3002S-BK"

(带有ascii连字符)时,不会返回任何数据,因为"PS-3002S-BK"!="PS-3002S-BK"。

处理这个问题的最佳方法是什么?

如果将数据保存到具有明确定义的正确格式(例如序列号或型号等)的列中,则始终将常用类型的连字符(U+2010、U+2011)或短划线(U+2012、U+2013、U+2014、U+2015)转换为 ASCII 减号,然后再将其保存到数据库中。最好在这种类型的列中禁止除 ASCII 以外的任何内容。

此外,当您在此定义明确的格式列中搜索时,也始终将连字符和破折号转换为 ASCII 减号。

如果因为您在评论等普通文本中搜索而无法做到这一点,那么您应该将搜索字符串"PS-3002S-BK"拆分为单词并搜索"PS"+"3002S"+"BK"。

相关内容

最新更新