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

new_forward

Профессор
Регистрация
5 Май 2008
Сообщения
673
Реакции
44
Доброго времени суток! Достаю страницу вот таким образом:
PHP:
function curl_get($host){
  $cl2 = curl_init();
  curl_setopt($cl2, CURLOPT_URL, $host);
  curl_setopt($cl2, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($cl2, CURLOPT_HEADER, 0);
  curl_setopt($cl2, CURLOPT_POST, 1);
  curl_setopt($cl2, CURLOPT_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($cl2, CURLOPT_CONNECTTIMEOUT, 60); // таймаут соединения
  curl_setopt($cl2, CURLOPT_TIMEOUT, 60);        // таймаут ответа
  curl_setopt($cl2, CURLOPT_REFERER, 'http://rutor.org/'); // Подделываем значение - откуда пришли данные.
  curl_setopt($cl2, CURLOPT_MAXREDIRS, 10);      // останавливаться после 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»©>

Как его можно перекодировать?
 
Может страница в gzip передается?

Покажите какие заголовки получаете с помощью курла.
 
Вот такие
Код:
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!!!
 
HTTP/1.1 100 Continue HTTP/1.1 200 OK Content-Type: text/html Content-Encoding: gzip X-Debug-Cache: 0

Выделенный текст говорит о том, что контет сжат с помощью 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;
А дальше смотреть, какой из вариантов подойдет.

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

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