Я пытаюсь разобрать http://www.desi-tashan.com/category/pakistan-tvs/aaj-tv/3-idiots/ с файлом_get_contents.
Но он возвращает очень необычные символы и символы.
где, как если бы я разбирал http://www.desi-tashan.com/, он работает хорошо. Может ли кто-нибудь сказать, почему это происходит?
Есть ли декодирование кодирования?
Страница, кажется, сделана с wordpress ..
контент, который вы видите, 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 для получения строкового символа в определенной позиции. Или Довольно ясно, просто подайте функцию с именем файла, и она вернет расширение выбранного вами файла.