Не понятная кодировка вытянутой страницы?

Тема в разделе "Как сделать...", создана пользователем new_forward, 20 дек 2011.

  1. new_forward

    new_forward

    Регистр.:
    5 май 2008
    Сообщения:
    668
    Симпатии:
    44
    Доброго времени суток! Достаю страницу вот таким образом:
    PHP:
    function curl_get($host){
      
    $cl2 curl_init();
      
    curl_setopt($cl2CURLOPT_URL$host);
      
    curl_setopt($cl2CURLOPT_RETURNTRANSFER1);
      
    curl_setopt($cl2CURLOPT_HEADER0);
      
    curl_setopt($cl2CURLOPT_POST1);
      
    curl_setopt($cl2CURLOPT_USERAGENT'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6');
      
    curl_setopt($cl2CURLOPT_CONNECTTIMEOUT60); // таймаут соединения
      
    curl_setopt($cl2CURLOPT_TIMEOUT60);        // таймаут ответа
      
    curl_setopt($cl2CURLOPT_REFERER'http://rutor.org/'); // Подделываем значение - откуда пришли данные.
      
    curl_setopt($cl2CURLOPT_MAXREDIRS10);      // останавливаться после 10-ого редиректа
      
    $result curl_exec($cl2);
      
    curl_close($cl2);
     
     
      
    $result iconv("UTF-8""windows-1251//TRANSLIT//IGNORE"$result);
      return 
    $result;
    }
     
    $content curl_get('http://rutor.org/');
    echo 
    $content;
    ВСЕ РАБОТАЕТ!

    НО если доставать страницу отдельной раздачи например Перейти по ссылке , то получается белая страница но а если убрать iconv то получается какой то бинарный код:

    Код:
    ‹xЪХ=k“ЫЖ‘џ—UъcH'’СА7№\•%ЩЉ«$Л'ЙIЭщ\[1дBjwЅЮ*IЋгёмД‰гє¤њДЏд®оѕЬХZТJkЅьИtЭ=|мC¶d]¤Т. Мфtчфs¦gґґvЭеc©ҐUnЪр{a©ЛC“†a?З1p®7•і^/дЅ0wuіПЦЯљJИ7В<цn°ЦЄй<БqќЮ[хy»© ґz="">Ёю ф|Ху;щVЁрOa>w›Jnє<ё m.щvЇібЧГ'Г‡рпСpwшxшxфСp—="" їЭ}Дтмjи›лмњЧ="" xЖРt="ЛОэмЬe§ПЮeГП‡_?gГ'Ј[м<пqЯtЫЋЫ]К‹Ap8`ЋУ“¬»f^7ЕS…~+ЖЫјfnЁПлёЬм;0^—ће]З" тЧ~1аюf^w‹Є!їЁ]§§^”奼Ђч”&%!¶<="" !Ж="" mЛе4zЏЇ+фuyЦ,…ютrhѓr»aЯм5ЖbЯлu–‡yЅ="" rwstkёЗf·f7@p="" wбч°aґ)ґсВ‘°\3дh6кеІ^И!°С'Ф†]�ng’="" cЗ,�z}°2щbЕ�е5эxeЕrНЮљВbjК%…yЅЁыzs9!е*“Жwйe–.—азЯи;="">к¬P.mgКтрo@Гы ‚{ЈаУM ioш-#:wЂМчF7‘ѓGўLП ї>ЭzzКфbIУ$жlЖОр[Р{Аvp~2јXЯT?УЃ_Щр3шыЕрk†ёCлрфЫЈвЇХћ)Џ 9*=ҐРу%pч€Сн€шьpф1Г.їyхТe ЖтK”2h¶&sg‘ їЅG¤QGљЄЫфьk”I”LаКGO3mїwћ–м¶зє Utz6Я /z}§Х4J…ўЪ :FҐ\ТЏGbJ�т)Иpб=Збn•Яе»ГGшо #)ЭЃ{H7К.ЅЈfЏ‰-ДKl‡iѕ wѓTц1КПЂ¶'ѕLq)OжЂ¬БЃ&[њИШ^kР…щОЄ>XѕНLd3Щ-§ќ‰uђ€SІKеRvлDF9.µ5‹>?іҐЂЅс|Ґ®xѕЩлpeQiCT‘[зNg5„З–зЪ ик6ьCјЖ6wВ¬E&р  MXРh2сХЉжш уафr.o‡u]лoЂ5@(ЛГ? �лPН>CH+љPЬю4XЩщoАспжw’Б…Гѓ}ъ~Nj»;јѓУ3ґ7NАMїµљЯИ—ЂАЉИьО. „+акqжцЗC“GBFP—жЃф]ПґQвчЃтG`гCІQП‡pНґ,обїђ#ЙѕS3ЅвЈ”¬ЋЌ :–†ѓ…чXк Щ=–Ъ|ЭфЩx„bL <ё><БqќЮ[хy»©>
    Как его можно перекодировать?
     
  2. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    991
    Симпатии:
    267
    Может страница в gzip передается?

    Покажите какие заголовки получаете с помощью курла.
     
    new_forward нравится это.
  3. new_forward

    new_forward

    Регистр.:
    5 май 2008
    Сообщения:
    668
    Симпатии:
    44
    Вот такие
    Код:
    HTTP/1.1 100 Continue HTTP/1.1 200 OK Content-Type: text/html Content-Encoding: gzip X-Debug-Cache: 0 Content-Length: 7944 Date: Mon, 19 Dec 2011 21:57:49 GMT Age: 0 Connection: keep-alive X-Debug: miss X-Debug-ID: 601940030
    Все разобрался спасибо за gzip!!!
     
  4. dandandan

    dandandan

    Регистр.:
    7 авг 2008
    Сообщения:
    991
    Симпатии:
    267
    Выделенный текст говорит о том, что контет сжат с помощью gzip.

    PHP:
    $content curl_get('http://rutor.org/');
    echo 
    $content;
     
    $uncompressed gzinflate($content);
    echo 
    $uncompressed;
     
    $uncompressed gzuncompress($content);
    echo 
    $uncompressed;
     
    $uncompressed gzdecode($content);
    echo 
    $uncompressed;
    А дальше смотреть, какой из вариантов подойдет.

    Подробнее читать тут:

    Перейти по ссылке
    Перейти по ссылке
    Перейти по ссылке
     
  5. Alternator

    Alternator

    Регистр.:
    23 мар 2009
    Сообщения:
    295
    Симпатии:
    145
    в сети(в частности на php.net) неймоверное количество рекомендаций по использованию gz* функций для раскодирования ответа сервера.
    Некоторые из них говорят отспуить скольк-то байт от начала строки.
    некоторые пытаются по-умному вычислить отступ.
    Но ни одно из них не работает на всем множестве сайтов, и умеет раскодировать только для определенного набора случаев

    Зато вот такая незамысловатая строчка , позволяет CURL-ом получить уже распакованый ответ, "на лету", для любого сайта
    PHP:
    curl_setopt($cl2CURLOPT_ENCODING""); 
    Решение опробовано на нескольких 10-ках тысяч сайтов, и везде заработало, в отличии от неуниверсальных gz*