[Top] [CGI研究室]
Webブラウザとプラットフォームの判別

CGIでWebブラウザとプラットフォームを
判別する方法について

  1. Webブラウザとプラットフォームを判別する理由
    どの様な場合にユーザー側のブラウザの種類/バージョンやプラットフォーム(マシン、OS)の種類(Windows、MAC、その他) を判別する必要があるかを以下に示します。


  2. Webブラウザとプラットフォームの判別方法
    CGIで、アクセスしているユーザー側のWebブラウザの種類/バージョンおよびプラットフォームの 種類を判別するには、環境変数のユーザーエージェントを使用します。

     $ENV{'HTTP_USER_AGENT'}

    ユーザーエージェントに含まれる文字列を解析して、Webブラウザの種類/バージョンおよび プラットフォームの種類を判別します。

  3. ユーザーエージェントの例
    ユーザーエージェントの例を以下に示します。

    ユーザーエージェント 説明
    Mozilla/4.0 (compatible; MSIE 4.01; Windows 98) Windows 98、IE 4.01
    Mozilla/4.0 (compatible; MSIE 5.01; Windows NT) Windows NT、IE 5.01
    Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0) Windows 2000、IE 5.01
    Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90) Windows me、IE 5.5
    Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1) Windows XP、IE 6.0
    Mozilla/3.03 [ja] (Win95; I) Windows 95、Netscape Navigator 3.03
    Mozilla/4.7 [ja] (Win98; I) Windows 98、Netscape Navigator 4.7
    Mozilla/4.73 [ja] (WinNT; U) Windows NT4.0、Netscape Navigator 4.73
    Mozilla/5.0 (Windows; N; WinNT4.0; ja-JP; m14) Netscape6/6.0b1 Windows NT4.0、Netscape 6 PR1
    Mozilla/5.0 (Windows; U; Windows NT 5.0; ja-JP; JAPressMailingNov00) Gecko/20001108 Netscape6/6.0 Windows 2000、Netscape 6
    Mozilla/4.0 (compatible; MSIE 4.01; Mac_68000) MAC 68K、IE 4.01
    Mozilla/4.0 (compatible; MSIE 4.5; Mac_PowerPC) MAC PPC、IE 4.5
    Mozilla/3.01 [ja] (Macintosh; I; 68K) MAC 68K、Netscape Navigator 3.01
    Mozilla/4.03 [ja] (Macintosh; I; 68K) MAC 68K、Netscape Navigator 4.03
    Mozilla/4.5 (Macintosh; I; PPC) MAC PPC、Netscape Navigator 4.5
    Mozilla/5.0 (Macintosh; N; PPC; en-US; m18) Gecko/20000929 Netscape6/6.0b3 MAC PPC、Netscape 6 PR3
    Mozilla/4.61 [en-j] (X11; I; Linux 2.0.36 i686) Linux、Netscape Navigator 4.61 かな?(^_^;)
    Mozilla/2.0 (compatible; MSIE 3.02; Windows CE) Windows CE、IE 3.02
    Mozilla/3.0 (DreamPassport/2.0; FROMSOFTWARE/FRAME GRIDE) ドリームキャスト、DreamPassport/2.0 FRAME GRIDE版
    Mozilla/3.0 (SonicPassport) ドリームキャスト、DreamPassport Sonic版
    Mozilla/3.0 WebTV/1.0 (Compatible; MSIE 2.0) 実際はドリームキャストだったがユーザーエージェントからはプラットフォーム特定不可、Microsoft WevTV for DreamCast(IE扱いするしかないかも...)
    JustView/3.01 プラットフォーム特定不可、JustView/3.01
    Plala-Browser/2.10 プラットフォーム特定不可、Plala-Browser/2.10(珍)
    DoCoMo/1.0/N502it/c10 N502it、i-mode
    DoCoMo/1.0/641S/c10 パルディオ641S、i-mode

    ※上記の例の説明では、Netscape Communicatorに含まれるNavigatorも Netscape Navigatorとして記述してあります。
     また、他にもブラウザによっていろいろなユーザーエージェントがありますので、 掲示板等で見たことがないユーザーエージェントを見つけた場合は記録しておくと いいかもしれません。


  4. Webブラウザの判別
    ユーザーエージェントの文字列を解析し、Webブラウザの種類/バージョンの判別を行います。

    1. InternetExplorerの判別
      IEを判別する場合、ユーザーエージェントの中に"MSIE"という 文字列が含まれているかどうかチェックして、含まれていればIE、含まれていなければIE以外と判断できます。
      また、IEのバージョンは"MSIE"+半角スペース+ バージョン文字列という形になっているので、簡単に取り出すことができます。
      (注)WebTVも"MSIE"という文字列 が含まれているため、IEの仲間と判断するのが妥当と思われます。

      例) IEか否かを判断するスクリプト(IE4以降の判別付き)
      $UserAgent = $ENV{'HTTP_USER_AGENT'} ;
      $IEFlag = 0 ;	# IEフラグ
      $IE4L = 0 ;	# IE4以降フラグ
      if ( $UserAgent =~ /MSIE ([0-9])/i )
      {
      	$IEFlag = 1 ;
      	if ($1 ge "4") { $IE4L = 1 ; }
      }
      else
      {
      	# IE以外のブラウザ
      }
      

    2. Netscape Navigatorの判別
      Netscape Navigatorの判別を行う場合、Ver.4以前とVer.6以降とで判別を分ける必要があります。

      ※この文章を書いている時点ではNetscape6 PR版までしかリリースされて おらず、今後のバージョンアップがNetscape6 PR版と同様の形式で識別できるという前提で以下を記述します。

      まず、Ver.6以降ですが、これはIEと同様にユーザーエージェントの中に "Netscape"という文字列が含まれているかどうかチェックして、 含まれていればNetscape6以降、含まれていなければNetscape6以降ではないと判断できます。
      バージョンは、"Netscape"+バージョン文字列という形のため 簡単に取得できます。

      次にVer.4以前ですが、判別のポイントは3つあります。
      1つはユーザーエージェント中に"compatible"という文字列が 含まれていない事です。
      2つめは、ユーザーエージェント中に、セミコロン(;)+半角スペース+ "I"または"U"+ 閉じ括弧またはセミコロン(;)という文字列が含まれている事です。
      3つめは、ユーザーエージェント中に、"Mozilla"という文字列が含まれている事です。
      全ての条件を満たしていればNetscape NavigatorのVer.4以前であると判断できます。
      バージョンは、ユーザーエージェントに含まれているMozillaバージョン ("Mozilla/"+バージョン文字列)で判断します。

      例) NNか否かを判断するスクリプト(NN4以降の判別付き)
      $UserAgent = $ENV{'HTTP_USER_AGENT'} ;
      $NNFlag = 0 ;	# NNフラグ
      $NN4L = 0 ;	# NN4以降フラグ
      if ( $UserAgent =~ /Netscape([0-9])/i )
      {
      	$NNFlag = 1 ;
      	if ($1 ge "4") { $NN4L = 1 ; }
      }
      elsif ( $UserAgent !~ /compatible/i && $UserAgent =~ /; [IU][;\)]/ && $UserAgent =~ /Mozilla/i )
      {
      	$NNFlag = 1 ;
      	$UserAgent =~ /Mozilla\/([0-9])/i ;
      	if ($1 ge "4") { $NN4L = 1 ; }
      }
      else
      {
      	# NN以外のブラウザ
      }
      

    3. その他のWebブラウザの判別
      IE、NN以外の特定のWebブラウザの判別を行ないたい場合は、IE、NNと同様の方法で判別を行なってください。
      特に必要が無ければ、「その他のWebブラウザ」という扱いのままでよいと思います。

  5. プラットフォームの判別
    ユーザーエージェントの文字列を解析し、プラットフォーム(マシン、OS)の判別を行います。

    1. Windowsの判別
      Windowsを判別する場合、ユーザーエージェントの中に"Windows"+ 半角スペースという文字列か、または"Win"という文字列が含まれており、 それに続く文字列が"95"または"98" または"NT"または"CE"であれば Windows、そうでなければWindows以外と判断できます。

      例) Windowsか否かを判断するスクリプト
      $UserAgent = $ENV{'HTTP_USER_AGENT'} ;
      $WinFlag = 0 ;	# Windowsフラグ
      if ( $UserAgent =~ /(Windows |Win)(95|98|NT|CE)/ )
      {
      	$WinFlag = 1 ;
      }
      else
      {
      	# Windows以外のプラットフォーム
      }
      

    2. Macintoshの判別
      Macintoshを判別する場合、ユーザーエージェントの中に"Mac_"または "Macintosh"という文字列が含まれているかどうかをチェックして、 含まれていればMacintosh、含まれていなければMacintosh以外と判断できます。

      例) Macintoshか否かを判断するスクリプト
      $UserAgent = $ENV{'HTTP_USER_AGENT'} ;
      $MacFlag = 0 ;	# Macintoshフラグ
      if ( $UserAgent =~ /(Mac_|Macintosh)/ )
      {
      	$MacFlag = 1 ;
      }
      else
      {
      	# Macintosh以外のプラットフォーム
      }
      

    3. その他のプラットフォームの判別
      Windows、Macintosh以外の特定のプラットフォームの判別を行ないたい場合は、Windows、Macintoshと 同様の方法で判別を行なってください。
      特に必要が無ければ、「その他のプラットフォーム」という扱いのままでよいと思います。


CGI Saloon