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

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);

Author Info(オガティ

エンジニアとして勤め、インフラ周りの開発を経た後Web業界へ異動。
プライベートでもブログ「ogatism」の運営や電子書籍の執筆、占星術師としての活動など幅広い分野で活動中。
詳細はこちら

占い鑑定レポート作成サービス受付中

◆ ogatismをFeedlyに登録 ◆
follow us in feedly