2012-09-28 4 views
1

http://www.desi-tashan.com/category/pakistan-tvs/aaj-tv/3-idiots/을 file_get_contents로 구문 분석하려고합니다.왜 file_get_contents가 이상한 문자를 반환합니까?

그러나 매우 특이한 문자와 기호를 반환합니다.

마치 내가 구문 분석하면 http://www.desi-tashan.com/ 잘 작동합니다. 누군가 이런 일이 왜 일어 났는지 말할 수 있습니까?

인코딩 디코딩이 관련되어 있습니까?

페이지는

+0

Google에서이 URL을 발견했습니다. –

+0

그게 도움이 될 수 있습니다. (http://www.oooff.com/php-scripts/basic-php-scraped-data-parsing/basic-php-data-parsing.php) 페이지는 인코딩 된 또는 워드 프레스 관련 구문 분석에 대해 많이 알지 못합니다 ... –

+0

기호가 바이너리의 이미지 일 수 있습니다. –

답변

7

당신이 gzipped

당신이 gzdecode 또는 zlib-decode보고 관심이있을 수도 있습니다 (PHP의 Zlib의 지원에 의해 사용할 수 없습니다 있습니다 것을 볼 내용 ... 워드 프레스로 만든 것 같다 기본값)

귀하의 코드는 다음과

$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); 
처럼 보일 수 있습니다

다른 해결책 here (HTTP 헤더를 Accept-Encoding 요청에 추가하여 gzip으로 보내지 않음). 서버가 Accept-Encoding 헤더를 무시,

그러나 www.desi-tashan.com에서 작동하지 않습니다, 항상 당신은 단순히 특정 위치에 문자와를 얻기 위해 javascript charAt method을 사용할 수 gzip으로 압축 된 내용

+0

감사합니다.그것은 효과가있었습니다. –

+0

솔루션이 잘 작동했습니다. –

-1

을 반환합니다. 또는 파일명이있는 함수를 전달하면 선택한 파일의 확장자가 반환됩니다.

3

이 문제는 웹 서버가 잘못 구성된 사이트에서 발생하며 클라이언트가 대응할 수 있는지 여부에 관계없이 압축 된 페이지를 다시 보냅니다. 클라이언트는 Accept-Encoding 헤더 (file_get_contents가 보내지 않는 헤더)를 표시합니다. 이것은 일반적으로 웹 브라우저에서 작동합니다. 기본값으로 압축 된 페이지를 요청하거나 요청하지 않은 경우에도 gzip으로 응답합니다. 하나.

(덧붙여 말하자면, 유닉스 계열 시스템에서는 파일에 저장하고 file을 실행하여 gzipped을 쉽게 확인할 수 있습니다. 또는 결과의 처음 몇 바이트 만 봅니다 사용자 - gzip 데이터는 1F 8B로 시작합니다.)

수동으로 내용을 압축 해제하는 대신 PHP의 컬 라이브러리를 직접 사용합니다. 당신은 콘텐츠 gzip으로 압축을 요청하는 것을 구성 할 수 있습니다, 그리고 당신이 할 경우, 그것은 투명하게 당신을위한 결과의 압축을 해제합니다 : 웹 서버가 제대로 얻는 것처럼 수동으로 디코딩 결과보다이 더 미래 지향적이다

$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을 처리 할 수없는 클라이언트에게 일반 텍스트를 다시 보내도록 구성된 경우이 코드는 여전히 압축 된 버전을 요청하고 디코딩합니다.

+0

이것은'gzdecode'를 지원하지 않는 호스트를위한 더 나은 해결책입니다 – SaidbakR

관련 문제