Почему file_get_contents() искажает данные GET?

Итак, насколько я понимаю, моя проблема в том, что file_get_contents() не отправляет правильный URL-адрес UTF-8, даже если он передается, поэтому данные $_GET, которые получает сервер, немного испорчены. Часть моего кода:

//receiving post data from html form "nacionālā opera"
$q = $_POST["q"];

if (!empty($q)) {
    $get_data = array( 
        'http' => array(
            'header'=> array("Content-Type: text/plain; charset=utf-8",
                             "User-agent: PHP bots;")   
        ) 
    );
    $stream_cont = stream_context_create($get_data);

    $search = str_replace(" ", "+", $q);
    $url = 'http://127.0.0.1/test.php?stotele='.$search.'&a=p.search&t=xml&day=1-5&l=lv';

    if (mb_detect_encoding($url) === 'UTF-8') {
        echo '$url encoding is ok...??';
    } else {
        echo 'URL encoding not UTF-8!';
        exit();
    }

    $rec_data = file_get_contents($url, false, $stream_cont);

Вот что получает сервер при печати массива $_GET:

stotele => nacionÄ_lÄ_ opera // this should have been "nacionālā opera", but as u see it got distorted
a => p.search 
t => xml 
day => 1-5 
l => lv 

Надеюсь, вы понимаете, что я пытаюсь сказать. Эта вещь сводит меня с ума, и я не могу ее решить, было бы неплохо, если бы кто-нибудь дал мне подсказки (и да, кодировка моего браузера установлена ​​​​на UTF-8, также форма отправляет UTF-8, и если я эхо $q или $ search или $url я получаю обычную строку, а не какие-то перепутанные символы.


person Javatar    schedule 04.10.2011    source источник


Ответы (2)


Попробуйте использовать urlencode.

// instead of this:
// $search = str_replace(" ", "+", $q);
// use:
$search = urlencode($q);
$url = 'http://127.0.0.1/test.php?stotele='.$search.'&a=p.search&t=xml&day=1-5&l=lv';
person daiscog    schedule 04.10.2011
comment
Ржу не могу! Я так уверен, что уже пробовал это, и это не сработало, но, похоже, я сделал что-то не так. Спасибо! Моя проблема теперь решена :) - person Javatar; 04.10.2011

видел это на php.net

if( mb_detect_encoding($str,"UTF-8, ISO-8859-1, GBK")=="UTF-8" ) 

or

if( mb_detect_encoding($str,"UTF-8, ISO-8859-1, GBK")==="UTF-8" ) 
person ka_lin    schedule 04.10.2011