Googleブログ検索結果RSSの文字コードがおかしい Shift_JIS?

 Googleブログ検索は検索結果をRSSやAtomで取得できます。
 それは良いのですが、このRSSを取得してみると、文字コードがどうもおかしいです。
 RSSヘッダにはUTF-8とあるのですが、実際にはShift JISで出力されているようです。
 気になって検索してみると、次のようなページがありました。

GoogleのRSSはやっぱり変! – ☆女の徒然草☆ – Yahoo!ブログ

 こちらによると、httpヘッダではShift JISになっていて、RSSヘッダではUTF-8。実際の内容はShift JISとのことです。
 Google ChromeでRSSのURLにアクセスして、手動でhttpヘッダを見てみると、「content-type: text/xml; charset=UTF-8」となっています。どうもコレはUTF-8のようですが、phpのスクリプトからアクセスすると、どう見ても結果はShift_JISです。
 そこで次のような感じでphpからヘッダ内容を見てみました。

$url = “https://www.google.co.jp/search?q=%E3%81%BB%E3%81%92&tbm=blg&output=rss”;

$opts = array(‘http’ =>
array(
‘method’ => ‘GET’,
‘max_redirects’ => ‘0’,
‘ignore_errors’ => ‘1’
)
);

$context = stream_context_create($opts);
$stream = fopen($url, ‘r’, false, $context);

var_dump(stream_get_meta_data($stream));

var_dump(stream_get_contents($stream));
fclose($stream);

 結果は「Content-Type: text/xml; charset=Shift_JIS」。やはりヘッダはShift_JISです。
 こちらのUser Agentを見ているのか、他の何かか分かりませんが、アクセス元によってUTF-8で返す時とShift_JISで返す時があるようです。
 ちなみに、

Google Blog Search: 検索結果 RSS の文字化け回避方法 – 過去ログ(-2007):ひろの雑記帳@神戸芸術工科大学デザイン教育研究センター

 でクエリで文字コード指定する、という方法があったのですが、スクリプト経由でアクセスした場合には、文字コード指定の有無に関わらずShift_JISで返ってきました(RSSヘッダは相変わらずUTF-8、内容はShift_JIS)。
 どういうことなのでしょう・・。

追記:
 UTF-8で返ってくる時と、Shift_JISで返ってくる時があります。結局HTTPヘッダを見て判定するしかないようです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする