Почему file_get_contents возвращает искаженные данные?

Я пытаюсь получить HTML-код с приведенной ниже страницы, используя простой PHP.

URL: https://kat.cr/usearch/architecture%20category%3Abooks/

Мой код:

$html = file_get_contents('https://kat.cr/usearch/architecture%20category%3Abooks/');
echo $html;

где file_get_contents работает, но возвращает зашифрованные данные:

шифрованные данные через PHP file_get_contents ()

Я пытался использовать cUrl а также различные функции, такие как: htmlentities(), mb_convert_encoding, utf8_encode и так далее, но просто получите разные варианты зашифрованного текста.

Источник страницы говорит, что это charset=utf-8, но я не уверен, в чем проблема.

призвание file_get_contents() на базовом URL kat.cr возвращает тот же беспорядок.

Что мне здесь не хватает?

0

Решение

Ответ вашего сайта сжимается, поэтому вам нужно распаковать его, чтобы преобразовать в исходную форму.

Самый быстрый способ — это использовать gzinflate() как показано ниже:

$html = gzinflate(substr(file_get_contents("https://kat.cr/usearch/architecture%20category%3Abooks/"), 10, -8));

Или для более продвинутого решения, пожалуйста, рассмотрите следующую функцию (найден на этом блог):

function get_url($url)
{
//user agent is very necessary, otherwise some websites like google.com wont give zipped content
$opts = array(
'http'=>array(
'method'=>"GET",
'header'=>"Accept-Language: en-US,en;q=0.8rn" .
"Accept-Encoding: gzip,deflate,sdchrn" .
"Accept-Charset:UTF-8,*;q=0.5rn" .
"User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:19.0) Gecko/20100101 Firefox/19.0 FirePHP/0.4rn")
);

$context = stream_context_create($opts);
$content = file_get_contents($url ,false,$context);

//If http response header mentions that content is gzipped, then uncompress it
foreach($http_response_header as $c => $h)
{
if(stristr($h, 'content-encoding') and stristr($h, 'gzip'))
{
//Now lets uncompress the compressed data
$content = gzinflate( substr($content,10,-8) );
}
}

return $content;
}

echo get_url('http://www.google.com/');
2

Другие решения

Это сжатие GZ, и при извлечении браузером браузер распаковывает это, поэтому вам нужно распаковать. Для вывода, а также вы можете использовать readgzfile ():

readgzfile('https://kat.cr/usearch/architecture%20category%3Abooks/');
2