file_get_contentsで取得した文字列が特定のサイトだけ文字化けしていた

Author:

file_get_contentsでURLからデータを取得したら、
だいたいのサイトは取得できるのになぜか特定のサイトだけ文字化けする出来事があった。

なぜだ?
unpack関数を使ってバイナリダンプしてみると、なぜか0x0とか入っている。
これ文字列じゃないぞ?何を取得しているんだ?
curlで取得してencodingを見てもtext/xmlとなっているのに。

正解は、gzip圧縮されていたためでした。
コマンドラインでcurl -Iを叩いてみると、

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Type: text/xml; charset=UTF-8

こんなヘッダになっている。
うそーん、phpコードからcurl_getinfoで見たらそんなの無いのに。

まあ仕方ない。
どうやらfile_get_contentsでは解凍できそうもないので、
curl_setopt( $ch, CURLOPT_ENCODING, “gzip” );
を入れてみる。

お、取得できた。
これでOKですかね。

と思ったらcurlはそのままじゃ301や302を取得できない。
下記を入れて解決。かな。

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_MAXREDIRS, 3);

Share on Facebook
Pocket