Помощник
Здравствуйте, гость ( Вход | Регистрация )
|
|
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
|
|
![]() |
|
|
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
|
|
|
|
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
|
|
![]() |
|
Текстовая версия | Сейчас: 16:05:2008 - 17:28 |