На главную

RiSearch Pro v.3.2 Manual

© С. Тарасов

Кодировки

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

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

my $query=urldecode($query{q});
open FILE, ">test";
print FILE "$query";
close(FILE);

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

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

      Необходимо перекодировать запрос в нужную кодировку.

$query{q} = urlencode(recode_function(urldecode($query{q})));

Замените "recode_function" на нужную вам функцию (win2koi, koi2win и т.п.) а саму функцию скопируйте из файла "encoding.txt" и поместите в конце скрипта.

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

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';

Автоматическая перекодировка страниц

      При индексации нескольких сайтов с использованием спайдера может возникнуть проблема, если на одном из сайтов используется кодировка windows-1251, а на другом koi8-r. Скрипт может автоматически перекодировать страницы, если сервер отдает правильную кодировку в HTTP заголовке. Для этого необходимо для одной из кодировок указать функцию перекодирования в таком виде:

 recode_by_http_header => { 
  'koi8-r' => \&lib::common_lib::koi2win, 
  'utf-8' => \&lib::common_lib::utf8_to_win1251, 
 }, 

      В данном случае автоматически будут перекодированны документы в koi8-r и UTF-8 кодировках и в индексе все документы будут представлены в кодировке windows-1251.

      Кроме того, скрипт может определять кодировку документа по мета-тегам:

 recode_by_meta_tag => { 
  'koi8-r' => \&lib::common_lib::koi2win, 
 }, 

либо можно указать скрипту, какие сайты или директории нужно перекодировать:

 recode_by_url => { 
  'http://www.server.com' => \&lib::common_lib::koi2win, 
  '/dir1/' => \&lib::common_lib::utf8_to_win1251, 
 }, 

      Скрипт содержит следующие функции перекодирования: koi2win, win2koi и utf8_to_win1251. При необходимости добавьте свои собственные функции.



http://risearch.org С.Тарасов, © 2000-2003