搜索具有正常字符的软标志

时间:2013-10-03 10:32:47

标签: ruby-on-rails postgresql

我在我的一个Rails项目中面临一个问题。 我的用户数据库包含具有特殊字符的名称,我希望它们在搜索结果中显示,同时使用简单字符进行搜索。 示例:假设我有一个名为“NoëlNocciolo”的用户(请注意e上的软标记)如果我通过“ Noel Nocciolo 我想要搜索“作为参数。

任何人都可以告诉我如何处理这些情况,因为没有人知道如何提供“e with two dots”的输入。 我使用postgres作为我的数据库。

此致 卡兰

2 个答案:

答案 0 :(得分:2)

您可以为搜索创建单独的字段“indexed_name”,并仅使用ASCII字符填充它。

然后你必须使用.gsub('ë', 'e')(或其ASCII码的任何其他非ASCII字符)预处理查询字符串并使用此处理过的查询进行搜索

并且我相信有更优雅的方式将任何字符串转换为ascii analog我只是给你指示)

答案 1 :(得分:0)

.parameterizeActiveSupport::Inflector.transliterate可能适用于您的用例。

"àáâãäå".parameterize
 => "aaaaaa"

但是,它不会处理等连字,因此您需要:

"àáâãÀffi".mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/,'').to_s
 => "aaaaAffi"