Форум программистов CODEBY.NET Хостинг в Беларуси — Active Technologies

Разработка бизнес сайтов

Нужны клиенты? Тогда сюда быстрее...
X   Сообщение сайта
(Сообщение закроется через 2 секунды)

Здравствуйте, гость ( Вход | Регистрация )




> Несовпадение кодировок для яндекса
Satell
Вставить ник
сообщение 5:01:2008, 11:05
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 26
Регистрация: 28:06:2007
Пользователь №: 11 610



Репутация: - 0 +


из формы с текстовым полем name=word передаётся запрос для яндекса в скрипт обработчик, код ниже
но яндекс не понимает кодировку и говорит что запрос был пустой, похоже это происходит во время передачи формы на сервер, хотя
print $word; после передачи печатает слово правильно.

если раскаментить строчку #$word="грузовые перевозки";
то всё будет работать, где что нужно поменять, чтобы яндекс понимал слово переданное из формы, есть ли какие-нибудь функции для смены кодировок, подозреваю, что нужно перевести в кодировку utf-8, библиотека iconv на моём сервере похоже не стоит.


Код
#!/usr/bin/perl
use LWP::UserAgent;
use HTTP::Request::Common;


sub urldecode{
    local($val)=@_;
    $val=~s/\+/ /g;
    $val=~s/%([0-9a-hA-H]{2})/pack('C',hex($1))/ge;
    return $val;
}

if ($ENV{'REQUEST_METHOD'} eq 'GET') {
    $query=$ENV{'QUERY_STRING'};
}
elsif($ENV{'REQUEST_METHOD'} eq 'POST'){
    sysread(STDIN, $query, $ENV{'CONTENT_LENGTH'});
}

@formfields=split(/&/,$query);
foreach(@formfields){
if(/^word=(.*)/){$word=&urldecode($1);}
}

print "Content-Type: text/html; charset=windows-1251\n\n";
print $word;


#$word="грузовые перевозки";
$ua=LWP::UserAgent->new or die; #создаем новый объект LWP::userAgent (браузер)

$h1 = new HTTP::Headers
Accept => 'application/vnd.ms-excel, application/msword, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-comet, */*',
User_Agent => 'testag',
Referer => 'http://ya.ru',
Accept-Language => 'ru',
Accept-Charset => 'iso-8859-1,*,utf-8,windows-1251';
$req1 = new HTTP::Request ('GET', 'http://www.yandex.ru/yandsearch?text='.$word, $h1);
$res=$ua->request($req1);



#проверяем был ли запрос удачен
$suc=$res->is_success;
if ($suc){
    print $res->content;
}


код формы:
Код
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Запрос</title>
</head>

<body>
<form action="cgi-bin/tests.cgi" method="post">
<p align="left">

<p align="left">
  <input type="text" name="word" size="26"></p>
<p><input type="submit" value="Send">
</p>
</form>
</body>
</html>
Подняться вверх 
 
Сообщение #1
 
Новая тема 
Ответов (1 - 2)
diff
Вставить ник
сообщение 6:01:2008, 23:37
Цитата Ответить 


Новенький
*

Группа: Программист
Сообщений: 16
Регистрация: 6:01:2008
Пользователь №: 14 623
Специализация: web-programming



Репутация: - 0 +


попробуйте поменять на форме "charset=iso-8859-1" на "charset=windows-1251"
если не поможет экспериментируйте с функциями смены кодировок. вот линк на мануал http://perldoc.perl.org/Encode.html
Подняться вверх 
 
Сообщение #2
Vovochka
Вставить ник
сообщение 10:01:2008, 00:17
Цитата Ответить 


Продвинутый
**

Группа: Программист
Сообщений: 198
Регистрация: 4:08:2006
Из: Vladivostok.pm
Пользователь №: 5 749
Специализация: Perl, Web



Репутация: - 4 +


Почему не использовать CGI для обработки запроса, а не парсить его вручную?
Код
use CGI;
my $q = CGI->new;
my $word = $q->param('word');

Если отдавать контент в utf8 то и форма твоя будет приходить тебе тоже в utf8
Код
print $q->header(-content-type => 'text/html', -charset => 'utf8');
Подняться вверх 
 
Сообщение #3


Быстрый ответ  Ответить  Новая тема 

> Быстрый ответ
Полужирный
Курсив
Подчеркнутый
Вставить изображение
Смайлики
Цитата
Код
 
 Отправлять уведомления об ответах на e-mail |  Включить смайлики |  Добавить подпись
   

 

RSS Текстовая версия Сейчас: 16:05:2008 - 17:28
с нами можно связаться по:
телефону: +375-(29)-632-60-67
e-mail:info@codeby.net