我在我的Rails項目之一面臨的一個問題。 我的用戶數據庫中包含有特殊字符的名稱,我想他們在搜索結果中顯示,而用簡單的文字搜索它。 例如:假設我有一個名爲「NoëlNocciolo」的用戶(請注意e上的軟標誌),如果我通過「Noel Nocciolo」作爲參數,我希望搜索該用戶。搜索軟體徵與普通字符
誰能告訴我如何與這些案件處理,因爲沒有人知道如何提供「電子與兩個點」的輸入。 ,我使用的是Postgres作爲我DATABSE。
問候, 卡蘭
我在我的Rails項目之一面臨的一個問題。 我的用戶數據庫中包含有特殊字符的名稱,我想他們在搜索結果中顯示,而用簡單的文字搜索它。 例如:假設我有一個名爲「NoëlNocciolo」的用戶(請注意e上的軟標誌),如果我通過「Noel Nocciolo」作爲參數,我希望搜索該用戶。搜索軟體徵與普通字符
誰能告訴我如何與這些案件處理,因爲沒有人知道如何提供「電子與兩個點」的輸入。 ,我使用的是Postgres作爲我DATABSE。
問候, 卡蘭
您可以創建單獨的字段「indexed_name」搜索,僅使用ASCII字符填充它。
然後,你必須預處理查詢字符串.gsub('ë', 'e')
(或任何其他非ASCII字符的ASCII模擬)以及與此處理查詢
搜索,我相信有任何字符串ASCII模擬信號轉換更優雅的方式我只是給你方向)
.parameterize
或ActiveSupport::Inflector.transliterate
可能會是您的使用情況下可以接受的。
"àáâãäå".parameterize
=> "aaaaaa"
但是,它不會處理連寫,如ffi
,所以,你需要:
"àáâãÀffi".mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/,'').to_s
=> "aaaaAffi"
這裏的問題是我的查詢字符串包含普通字符(諾埃爾Nocciolo),但我的數據庫記錄中包含非ASCII字符(NOEL Nocciolo)。您提出的解決方案反之亦然。 –
它不是反之亦然,但包括如果用戶找到辦法如何查詢「E」。在簡單的情況下,你只需直接在indexed_name現場搜索,但你如果你已經有分貝填充非ASCII準備吧局面名稱值 – okliv