Как написать скрипт поиска php, в котором слова с диакритическими знаками соответствуют поисковым терминам без диакритических знаков, а результаты подчеркнуты? - PullRequest
2 голосов
/ 01 марта 2010

У меня есть этот сайт, где много текстов с диакритическими знаками (вспомогательные глифы, добавленные к буквам, согласно википедии), и большинство людей ищут эти тексты, используя слова без глифов. Теперь это не должно быть сложно сделать, имея копию текстов без диакритических знаков. Тем не менее, я хочу выделить совпадения в исходном тексте. Какой лучший способ сделать это?

1 Ответ

1 голос
/ 22 июня 2011

Вы должны попробовать изменить настройку параметров сортировки в БД MySQL.

При обсуждении этой темы часто возникают три вопроса:

  1. utf8_general_ci

  2. utf8_unicode_ci

  3. utf8_bin ← Вы, вероятно, хотите это.

Я обнаружил, что # 3 будет соответствовать акцентам в поиске. Этот ответ дает некоторую предысторию различий, но не учитывает тот факт, что utf8_bin также чувствителен к акцентам. Возможно, вы захотите попробовать все три, чтобы проверить сами, работает ли он с языком / сценарием, с которым вы работаете.

Чтобы быть уверенным в том, что все будет соответствовать правильно, вам также придется взглянуть на нормализацию Unicode, которая на самом деле представляет собой совершенно другой шарик воска. Возможно, что ваш пользователь мог ввести запрос с ударением, отличным от того, в котором хранятся ваши данные, и поэтому он может не совпадать. У меня была такая проблема с Sqlite, но я не уверен, относится ли она к MySQL или нет.

FWIW, вот CREATE TABLE, который я сейчас использую, где мне нужно было сопоставить акценты, это настройка COLLATION:

CREATE TABLE `glosses` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `morphemes` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `labels` varchar(255) CHARACTER SET utf8 DEFAULT NULL,
  `phrase_id` int(11) DEFAULT NULL,
  `nth_word` int(11) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

В конце вы можете увидеть прикрепленный COLLATE=utf8_bin.

...