既に多くのプログラマーさんがやっているとは思いますが、PHPでInternet Explorerのバージョンを判定するプログラムを考えてみました。
1 2 3 4 5 6 7 8 9 10 |
$ua = $_SERVER['HTTP_USER_AGENT']; $uaBrowserInfo['browser'] = ""; $uaBrowserInfo['version'] = ""; if (preg_match("/Trident\/(\d{1,}\.(\d{1,})).*rv:(\d{1,}\.(\d{1,}))/", $ua, $regExpResults)) { $uaBrowserInfo['browser'] = "IE"; $uaBrowserInfo['version'] = (float)$regExpResults[3]; } elseif (preg_match("/MSIE\s(\d{1,}\.\d{1,})/i", $ua, $regExpResults)) { $uaBrowserInfo['browser'] = substr($regExpResults[0], 2, 2); $uaBrowserInfo['version'] = (float)$regExpResults[1]; } |
ざっくり解説。
まず、uaという変数にUser Agentの値を入れる。
uaBrowserInfoのbrowserとversionを空にする。
正規表現で、先ずはIE11の新しくなったUser Agentかどうかを判定する。
Tridentとrv:があればIEとして、uaBrowserInfoのbrowserにIEと入れ、versionにはregExpResultの4番目の値がrv:の後の値が入っているので、それをfloatに変換して入れる。
次の処理で、従来の「MSIE バージョン番号」が見つかったら、uaBrowserInfoのbrowserにregExpResultsの1番目の値からIEという文字列抜き出して入れる。
バージョンはregExpResultの2番目の値をfloatに変換して入れる。
色々なパターンを試してみたので、おそらくこれで問題はないかと思います。
【2014/8/1 14:37追記】
ちなみに、互換モードは考慮していません。