[PHP] 簡易的に国を判定する方法

強固な判定ロジックは必要なかったので、簡易的に判定できる方法を…。
“国判定”と言いながら、必要だったのは「日本」だけなので、正確には『日本判定』だった。

#HTTP_ACCEPT_LANGUAGE

$_SERVER['HTTP_ACCEPT_LANGUAGE']を使用すると、ブラウザの言語設定(表示言語の優先順位)から言語コードが取得できる(以下の様な感じで)。

ja,en-US;q=0.7,en;q=0.3

ちなみにブラウザから取得できる各言語コードは以下の通り。

言語コード 言語名
is アイスランド語
ga アイルランド語
af アフリカーンス語
sq アルバニア語
it イタリア語
id インドネシア語
uk ウクライナ語
nl オランダ語
nl-BE オランダ語/ベルギー語
ca カタロニア語
gl ガリチア語
el ギリシア語
hr クロアチア語
sv スウェーデン語
gd スコッチ ゲール語
es スペイン語
es-AR スペイン語/アルゼンチン
es-CO スペイン語/コロンビア
es-ES スペイン語/スペイン
es-MX スペイン語/メキシコ
sk スロヴァキア語
sl スロヴェニア語
sr セルビア語
cs チェコ語
da デンマーク語
de ドイツ語
de-AU ドイツ語/オーストリア
de-CH ドイツ語/スイス
de-DE ドイツ語/ドイツ
tr トルコ語
no ノルウェー語
eu バスク語
hu ハンガリー語
fi フィンランド語
fo フェロー語
fr フランス語
fr-CA フランス語/カナダ
fr-CH フランス語/スイス
fr-FR フランス語/フランス
fr-BE フランス語/ベルギー
bg ブルアリア語
pl ポーランド語
pt ポルトガル語
pt-BR ポルトガル語/ブラジル
mk マケドニア語
ro ルーマニア語
ru ロシア語
en 英語
en-GB 英語/英国
en-US 英語/米国
ko 韓国語
zh 中国語
zh-TW 中国語/台湾
zh-CN 中国語/中国
ja 日本語
be 白ロシア語

#判定ロジック

/**
* 簡易的な日本判定
* @return boolean
*/
public static function is_japan() {
    $result = false;
    $languages = explode(',', $_SERVER['HTTP_ACCEPT_LANGUAGE']);

    foreach ($languages as $language) {
      if (preg_match('/^ja/i', $language)) {
        $result = true;
        break;
      }
    }
      
    return $result;
}

HTTP_ACCEPT_LANGUAGEを,区切りで配列にする(explode)。
先頭が日本(ja)にマッチしたらtrue判定にしてループをbreak(その後、return)。

twitterfacebookhatenafacebook