[PHP]海外アクセス国内アクセスをPHPで判別する

超ひさしぶりの更新です。

最近、海外ユーザーにも訴求したサービスを立ち上げました。
初音ミクの動画を紹介しております。
http://miku-music.com/


日本語タイトルと英語タイトルを二つDBに保持しているので、曲リスト一覧で、
海外ユーザーには英語タイトルで表示しています。

今回は海外ユーザーかどうかを判別するプログラムを紹介します。

====キーワード ====
・HTTP_HEADER
・ACCEPT_LANGUAGE
・strpos


ブラウザから送られてくるHTTP_HEADERの値にACCEPT_LANGUAGEという値が入っています。
中身は、「ja.en」といった具合に、言語の優先度が記述されています。海外であれば、おそらく「en,ja」といった優先度になるかと思います。
この値を使って海外ユーザーかどうかを判定します。

strposという文字列検索関数を使うと、検索ヒットしたindex番号(0からはじまります)が返却され、ヒットしなければfalseが返却されます。
まとめると下記のようなプログラムになりました。


        private function _isEnglish(){
                if(empty($_SERVER['HTTP_ACCEPT_LANGUAGE'])) return true;
                $lang   = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
                $ja     = strpos($lang,'ja');
                $en     = strpos($lang,'en');
                if($ja === false || $en === false) return true;
                if($en < $ja){
                        return true;
                }else{
                        return false;
                }
        }


注意したいところとして、strposは0が返却されるかもしれないし、falseかもしれないので、if($var)といったおなじみの使い方はNGとなります。===でfalseかどうかを判定してあげましょう。

上記プログラムでは、ACCEPT_LANGUAGEが設定されていなかったり、jaでもenでもないというイレギュラーの場合はすべて海外ユーザーとして判定(true)しています。

以上。

このブログ記事について

このページは、tatsuyaが2012年2月16日 01:26に書いたブログ記事です。

ひとつ前のブログ記事は「[admob]admobAPIで日付ソートで収益を取得する」です。

次のブログ記事は「[クラウド]話題のPaaSニフティC4SAでtackphpを動かす」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。