из формы с текстовым полем 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. Зачем изобретать велосипед и распарсивать Get/Post самому, когда есть уйма модулей делающих это в совершенстве. Неужели вы думаете что ваш код действительно лучше?
2. Что вам мешает сделать print "$word\n" дабы глянуть что реально у вас в этой переменной.
3. Для перекодировок есть Encode
>Accept-Charset => 'iso-8859-1,*,utf-8,windows-1251';если вы хотите в cp1251 так и указывайте ее первой или единственной
Accept-Charset => 'windows-1251';