Обнаружил еще одну проблему – иногда поисковые запросы не подсвечиваются и не выводится фрагмент, в котором найдено слово (если не совпадает регистр). Решается она так (для utf8): в сниппете AjaxSearch ищется строка
if (preg_match('/' . preg_quote($searchTerm) . '/i', $text)) {
и после /I добавляется u, то есть в итоге должно получиться
if (preg_match('/' . preg_quote($searchTerm) . '/iu', $text)) {
Немного ниже ищется строка,начинающаяся на
$summary .= preg_replace( '/' . preg_quote( $searchTerm, '/' ) . '/i'
и в ней выполняется такая же операция, то есть добавляется u после i.
Далее точно такие же две строки следует отредактировать в файле AjaxSearch.php. После этого подсветка работает и все выводится как надо. То есть вроде бы AjaxSearch правильно работает с русскими буквами после некоторых доделок и при правильно установленной кодировке.
Однако есть все же еще одна проблема. Если из результатов поиска перейти на страницу при включенной подсветке, подсвечены будут все найденные слова на этой странице. Но если регистр слов не совпадает с тем, что был в поисковом запросе, подсветка не работает. Я поискал, но не обнаружил источник проблемы. Может кто-то попробует найти его?
Пример работающего поиска можно посмотреть на сайте
e-kao.ru, введя, например, слово «СтИль». Правда сейчас некоторые проблемы с хостингом, сайт периодически недоступен.
Перейдя по ссылке «Щелкните здесь, чтобы увидеть все результаты поиска.» можно увидеть подсвеченные фрагменты, но если перейти по ссылке на один из найденных документов, подсветка исчезнет. Если же искать «стиль», подсветка не исчезает.