Несовпадение кодировок для яндекса

Тема в разделе "Perl программирование", создана пользователем Satell, 5 янв 2008.

Статус темы:
Закрыта.
  1. Satell

    Satell Гость

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

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


    Код (Text):
    #!/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;
    }
    код формы:
    Код (Text):
    <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>
     
  2. diff

    diff Гость

    попробуйте поменять на форме "charset=iso-8859-1" на "charset=windows-1251"
    если не поможет экспериментируйте с функциями смены кодировок. вот линк на мануал http://perldoc.perl.org/Encode.html
     
  3. Vovochka

    Vovochka Гость

    Почему не использовать CGI для обработки запроса, а не парсить его вручную?
    Код (Text):
    use CGI;
    my $q = CGI->new;
    my $word = $q->param('word');
    Если отдавать контент в utf8 то и форма твоя будет приходить тебе тоже в utf8
    Код (Text):
    print $q->header(-content-type => 'text/html', -charset => 'utf8');
     
Загрузка...
Похожие Темы - Несовпадение кодировок для
  1. deeeman
    Ответов:
    2
    Просмотров:
    2.580
  2. vital
    Ответов:
    6
    Просмотров:
    2.828
  3. morpheus
    Ответов:
    21
    Просмотров:
    7.758
Статус темы:
Закрыта.

Поделиться этой страницей