почему file_get_contents возвращают странные символы?

Я пытаюсь разобрать http://www.desi-tashan.com/category/pakistan-tvs/aaj-tv/3-idiots/ с файлом_get_contents.

Но он возвращает очень необычные символы и символы.

где, как если бы я разбирал http://www.desi-tashan.com/, он работает хорошо. Может ли кто-нибудь сказать, почему это происходит?

Есть ли декодирование кодирования?

Страница, кажется, сделана с wordpress ..

Solutions Collecting From Web of "почему file_get_contents возвращают странные символы?"

контент, который вы видите, gzipped

вам может быть интересно посмотреть на gzdecode или zlib-decode gzdecode (обратите внимание, что поддержка Zlib в PHP не включена по умолчанию)

Ваш код может выглядеть так:

 $url = 'http://www.desi-tashan.com/category/pakistan-tvs/aaj-tv/3-idiots/'; $content = file_get_contents($url); $decoded_content = gzdecode($content); // or zlib_decode($content); 

Другое решение здесь в stackoverflow, которое добавляет HTTP-заголовок Accept-Encoding в запросе, указывающем серверу НЕ для gzip.

Однако он не работает на www.desi-tashan.com , сервер игнорирует заголовок Accept-Encoding и всегда возвращает gzipped-контент

Я видел, как это происходит на сайтах, где веб-сервер неправильно настроен и отправляет обратно сжатую страницу, указывает ли клиент, что он может справиться с этим. (Клиент указывает это с заголовком Accept-Encoding , который file_get_contents не отправит.) Обычно это работает в веб-браузерах, поскольку они либо запрашивают страницу, сжатую по умолчанию, либо справляются с gzip-ответом, даже если они не попросите его.

(Кстати, если в системе, основанной на unix, вы можете легко подтвердить, что то, что возвращается, gzipped, сохраняя его в файл, а затем запуская файл на нем. Или просто посмотрите на первые пару байт результата самостоятельно-gzip-данные начинается с 1F 8B.)

Вместо того, чтобы разархивировать содержимое вручную, я лично использовал бы библиотеку curl PHP. Вы можете настроить это для запроса содержимого gzipped, и если вы это сделаете, он будет прозрачно распаковать результат для вас:

 $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, 'http://actualidad.rt.com/actualidad'); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt ($ch, CURLOPT_ENCODING , 'gzip'); $content = curl_exec ($ch); 

Это более надежное будущее, чем ручное декодирование результата, как если бы веб-сервер правильно настроил в будущем отправку обычного текста клиентам, которые не могут обрабатывать gzip, этот код по-прежнему будет запрашивать и декодировать сжатую версию.

Вы можете просто использовать метод javascript charAt для получения строкового символа в определенной позиции. Или Довольно ясно, просто подайте функцию с именем файла, и она вернет расширение выбранного вами файла.