[PHP] 簡易判定する方法

2 min read
hiroweb developer

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

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