Quote from: traveller at Jan 14, 2008, 02:14 PM
Кажется, не забыл ничего.
Ну, вообще-то это решение только одной проблемы, а есть и другие.
Quote from: MaIron at Jan 14, 2008, 11:35 AM
В .htacces нужно написать AddDefaultCharset UTF-8
Что-то не нравится мне такое решение – наверняка можно без .htacces обойтись. Мне почему-то кажется, что команда mb_internal_encoding("UTF-8"); или что-то похожее может помочь. В любом случае, лично я .htacces точно не корректировал, и вряд ли на хостинге по умолчанию UTF-8 (я даже уверен, что не UTF-8).
---
Итак, посмотрев новую версию ajaxSearch, я выявил некоторые проблемы и наметил следующие пути их решения:
---
Проблемы и решения для версии ajaxSearch 1.7.
1. Проблема - иногда поисковые запросы не подсвечиваются и не выводится фрагмент, в котором найдено слово (если не совпадает регистр).
Решение (для utf8) – в файле
snippet.ajaxSearch.inc.php ищется строка
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.
В плагине
Search Highlighting нужно найти строку
$pattern = '/' . preg_quote($word) . '(?=[^>]*<)/i';
и добавить u после i, то есть получить в результате
$pattern = '/' . preg_quote($word) . '(?=[^>]*<)/iu';
После этих исправлений подсветка работает.
По-хорошему нужно проверять, какая используется кодировка, и добавлять u только для utf8.
2. Проблема – функция urlencode правильно кодирует строки, когда не используется Ajax, и не кодирует, когда он используется (получаются адреса с русскими буквами).
Решение: В файле
ajaxSearch.php найти выражения
urlencode(htmlentities($searchString,ENT_QUOTES,$pgCharset)) (там они встречаются 2 раза) и заменить их на
urlencode(urlencode(htmlentities($searchString,ENT_QUOTES,$pgCharset))).
3. Проблема – если в найденной странице (в Ajax-результатах) имеется символ процента –
%, весь Ajax-поиск рушится. То есть выдает ошибку распознавания URL (это, как мне кажется, проблема реализации Ajax в mootools, хотя могу и ошибаться).
Решение (не слишком удачное) – % меняю на «проц.». При этом, если перейти на страницу поиска или на найденную страницу, там будут знаки %, слово «проц.» только в Ajax-результатах.
Нормальное решение требует углубленного изучения проблемы.
4. Проблема: Если ищется словосочетание
Слово1 Слово2, и точно так оно имеется на странице, выводится сначала найденный фрагмент для первого слова, а потом практически такой же фрагмент для второго слова, что не совсем идеологически верно – фактически в результатах поиска два раза один фрагмент с разными подсвеченными словами.
Решение: нужно менять логику, чтобы найденные в одном фрагменте слова больше не искались.
Сходу такое не реализовать.
Другие проблемы, имеющиеся в предыдущей версии, вроде бы решены, хотя на 100% я не уверен, так как основательно не тестировал.