Help us understand the problem. What is going on with this article?

PHPでBOMを削除

More than 5 years have passed since last update.

GooglePlayのランキングを取得できるこのAPI。

http://doroidpanic.com/ws/googleplay-ranking-api/ranking/0

取得してみると、

$feed = file_get_contents('http://doroidpanic.com/ws/googleplay-ranking-api/ranking/0');
$appList = json_decode($feed, true);
var_dump($appList); // null

ん!?null!?実際にブラウザで確認してみるときちんと取得できている。

これが発端で色々調べたのですが、どうやらリターンされるjsonがUTF-8の"BOMあり"で書かれており、うまくデコードできなかったようです。
んでこのBOMなのですが、Byte Order Markという正式名称らしく、要するにデータの先頭にくっつくマーク。バイナリデータでみてみると「EF BB BF」という文字が先頭についています。

これは「これはUTF-8だよ!」ということを表しているみたいです。つまりUTF-8にも、「UTF-8(BOMなし)」「UTF-8(BOMあり)」の2パターンがあるみたいですね。略記としてBOMなしのほうは「UTF-8N」と書かれるみたいです。Nothing、ですかね。

さて、ということでこのBOMを取り除いてやれば一件落着です。

$feed = file_get_contents('http://doroidpanic.com/ws/googleplay-ranking-api/ranking/0');
$appList = json_decode(preg_replace('/[\x00-\x1F\x80-\xFF]/', '', $feed),true);
var_dump($app_List); 

// 結果
[
{
position: "1",
title: "1. 【史上最強放置ゲー】バトルダイアリー~新感覚楽ちんRPG~",
icon: "https://lh3.googleusercontent.com/R3TkcFlztdUfX6dEWD7QfF6wFAxaDvyqhBCMIy5LK57yzpQmC583hrGAb9q3c1ZxIZ8=w170",
developer: "",
category: "ロールプレイング",
price: "0"
},

以上です。

YusukeHigaki
株式会社ニコリーで代表をしております。起業当初は自分でも開発をしていたのですが、最近はCTO以下、自分より遥かに優秀なメンバーにバトンタッチし、もっぱら企画や営業周りを統括しています。自分で書いていた経験もあり、エンジニアという職種に対するリスペクトは絶大です。
http://ticktockblog.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away