RiSearch

Поисковый скрипт

        English / Russian

Введение
Инсталляция
Системные
требования

Производительность
Язык запросов
Пользователи
Кодировки
ЧаВо
Планы
Форум

Кодировки

      Вы можете столкнуться с некоторыми проблемами в настройке скрипта, если на сайте используются кодировки, отличные от WIN-1251. По умолчанию скрипт должен работать с кодировкой 1251, при условии, что запрос приходит в той же кодировке. Если это условие не выполняется, Вам придется подредактировать скрипт.

      В подавляющем большинстве случаев запрос на сервер поступает в кодировке 1251, но некоторые сервера самостоятельно перекодируют запрос и только затем передают его скрипту. Если Вы не уверены, этот вопрос можно прояснить у Вашего системного администратора, или самостоятельно, как это описано ниже. В файле "search.pl" после строки  $query=urldecode($ndquery);  добавьте следующий код:

open FILE, ">test";
print FILE "$query";
close(FILE);

Затем откройте файл "test" и посмотрите, в каком виде скрипт получает запрос от пользователя. При необходимости, в этом же месте добавте в скрипт функцию перекодировки запроса (см. ниже).

      Если Ваш вебсервер перекодирует запрос прежде чем отдать его стрипту, появится проблема с формированием ссылок на последующие страницы с результатами поиска. Например, все Ваши файлы хранятся в кодировке windows-1251, запрос приходит в той же кодировке, но сервер его перекодирует и скрипт получает запрос уже в koi-8. Самое правильное в такой ситуации перенастроить сервер. Если же это невозможно, придется заниматься перекодировкой внутри скрипта.

      Во первых, надо перекодировать запрос в нужную кодировку. Делать это надо после того, как запрос будет декодирован из формата urlencoded в обычный текст (то есть после строки $query=urldecode($ndquery); )

$query=urldecode($ndquery);
$query=koi2win($query);

Поиск теперь должен работать, но осталась еще одна проблема. При формировании ссылок на следующие страницы с результатами поиска скрипт использует запрос в том виде, в каком получил его от сервера (то есть, в данном случае в koi-8). Соответственно, при попытке получить вторую страницу, ничего найдено не будет. Необходимо самостоятельно закодировать запрос в кодировке 1251. Для этого можно воспользоваться функцией urlencode.

$query = urldecode($ndquery);
$query = koi2win($query);
$ndquery = urlencode($query);

      Еще один вопрос, который необходимо решить, это конвертация заглавных букв в строчные. Для этого в файле "config.pl" необходимо указать соответствующие коды символов. Ниже приведены коды заглавных и строчных букв для трех наиболее употребительных кодировок.

WIN
$CAP_LETTERS = '\xC0-\xDF\xA8';
$LOW_LETTERS = '\xE0-\xFF\xB8';

KOI
$CAP_LETTERS = '\xE0-\xFF\xB3';
$LOW_LETTERS = '\xC0-\xDF\xA3';

DOS
$CAP_LETTERS = '\x80-\x9F\xF0';
$LOW_LETTERS = '\xA0-\xAF\xE0-\xEF\xF1';

Если файлы на сервере лежат в одной кодировке, а запрос приходит в другой, Вам понадобятся различные версии файла "config.pl" для индексации и для поиска.

      Последнее, что нужно подправить, это вывод информации. Если файлы на сервере лежат в кодировке отличной от той, в которой скрипт отдает данные пользователю, то необходимо перекодировать информацию о файлах, которая хранится в файле "finfo". Вы можете перекодировать сразу весь файл, либо делать это на лету. Для этого в файле "search.pl" после строки $dum = <FINFO>; добавьте следующую строку:

$dum = &dos2win($dum);

Все необходимые функции перекодировки можно взять в файле encoding.txt.



Введение | Инсталляция | Системные требования | Производительность | Язык запросов | ЧаВо | Планы | Форум

Home: http://www.alooks.ru/ Sergej Tarasov, © 2010.