[PHP] 簡易的に国を判定する方法
2 min read
強固な判定ロジックは必要なかったので、簡易的に判定できる方法を…。
"国判定"と言いながら、必要だったのは「日本」だけなので、正確には『日本判定』だった。
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
)。