Направляющие уже имеют встроенное для нормализации, просто необходимо использовать это для нормализации строки, чтобы сформировать KD и затем удалить другие символы (т.е. метки диакритического знака) как это:
>> "àáâãäå".mb_chars.normalize(:kd).gsub(/[^\x00-\x7F]/n,'').downcase.to_s
=> "aaaaaa"
iconv:
http://groups.google.com/group/ruby-talk-google/browse_frm/thread/8064dcac15d688ce ?
=============
модуль жемчуга, который я не могу понять:
http://www.ahinea.com/en/tech/accented-translate.html
грубая сила ============
(существует много тех существ!:
http://projects.jkraemer.net/acts_as_ferret/wiki#UTF-8support
Ключ должен использовать два столбца в Вашей базе данных: canonical_text
и original_text
. Используйте original_text
для дисплея и canonical_text
для поисков. Тот путь, если пользователь ищет "Визуальное Кафе", она видит "Визуальный CafГ©" результат. Если она действительно хочет различный объект, названный "Визуальное Кафе", оно может быть сохранено отдельно.
Для получения canonical_text символов в исходном файле Ruby 1.8 сделайте что-то вроде этого:
register_replacement([0x008A].pack('U'), 'S')
Преобразуйте текст в нормализацию, формируют D, удаляют все кодовые точки с unicode категорией, не располагающей метку с интервалами (Mn), и преобразовывают, это назад к нормализации формирует C. Это разделит все диакритические знаки, и Ваша проблема уменьшается до поиска без учета регистра.
См. http://www.siao2.com/2005/02/19/376617.aspx и http://www.siao2.com/2007/05/14/2629747.aspx для деталей.
Вы, вероятно, хотите разложение Unicode ("NFD"). После разложения строки просто отфильтруйте что-либо не в [A-Za-z]. Г ¦ разложится к "одному", ГЈ к "~" (приблизительно - диакритическое станет отдельным символом), таким образом, фильтрация оставит разумное приближение.
Я думаю, что Вы, возможно, не делаете действительно, что спуститься по тому пути. Если Вы разработаете для рынка, который имеет подобные буквы, то Ваши пользователи, вероятно, будут думать, что Вы - своего рода... зернышко . Поскольку 'ГҐ' даже не близко к ни в каком значении пользователю. Поднимите различную дорогу и чтение о поиске в неASCII путь. Это - только один из тех случаев, кто-то изобрел unicode и сопоставление .
А очень последний PS:
http://www.w3.org/International/wiki/Case_folding http://www.w3.org/TR/charmod-norm/#sec-WhyNormalization
Помимо этого у меня нет язя путем, ссылка на сопоставление переходит к странице MSDN, но я оставляю его там. Это должно было быть http://www.unicode.org/reports/tr10/
lol.. я просто попробовал это.. и это работает.. Я все еще не вполне уверен почему.. но когда я использую это 4 строки кода:
это автоматически удаляет любой диакритический знак из имен файлов.. который я пытался удалить (диакритический знак из имен файлов и переименовывал их, чем), надеются, что он помог :)
Для тех, кто читает это и хочет удалить все не-ascii-символы это может быть полезно, я успешно использовал первый пример.