web-dev-qa-db-ja.com

PHP:Internet Explorer 6、7、8、または9の場合

私はPHPで次の行に沿ってInternet Explorerのさまざまなバージョンの条件を実行したいと思います。

if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...

同様のコードで多くのバリエーションを見てきましたが、非常にシンプルで、簡単なifやelseを実行して別のことを実行する非常に簡単なものを探しています。

ありがとう

編集:ユーザーにいくつかの異なるメッセージを表示するためにこれが必要なので、CSS条件などは良くありません。

84
Cameron

これは私がIE8以下をチェックするバリエーションを使用してしまったものです:

if (preg_match('/MSIE\s(?P<v>\d+)/i', @$_SERVER['HTTP_USER_AGENT'], $B) && $B['v'] <= 8) {
    // Browsers IE 8 and below
} else {
    // All other browsers
}
130
Cameron

IE10とIE11の両方で引き続き動作するバージョン:

preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
if(count($matches)<2){
  preg_match('/Trident\/\d{1,2}.\d{1,2}; rv:([0-9]*)/', $_SERVER['HTTP_USER_AGENT'], $matches);
}

if (count($matches)>1){
  //Then we're using IE
  $version = $matches[1];

  switch(true){
    case ($version<=8):
      //IE 8 or under!
      break;

    case ($version==9 || $version==10):
      //IE9 & IE10!
      break;

    case ($version==11):
      //Version 11!
      break;

    default:
      //You get the idea
  }
}
83
Doug

Phpでブラウザを検出するための優れたリソースを次に示します。 http://php.net/manual/en/function.get-browser.php

最も簡単な例の1つを次に示します。

<?php
function get_user_browser()
{
    $u_agent = $_SERVER['HTTP_USER_AGENT'];
    $ub = '';
    if(preg_match('/MSIE/i',$u_agent))
    {
        $ub = "ie";
    }
    elseif(preg_match('/Firefox/i',$u_agent))
    {
        $ub = "firefox";
    }
    elseif(preg_match('/Safari/i',$u_agent))
    {
        $ub = "safari";
    }
    elseif(preg_match('/Chrome/i',$u_agent))
    {
        $ub = "chrome";
    }
    elseif(preg_match('/Flock/i',$u_agent))
    {
        $ub = "flock";
    }
    elseif(preg_match('/Opera/i',$u_agent))
    {
        $ub = "opera";
    }

    return $ub;
}
?>

その後、コードの中で次のように言うことができます

$browser = get_user_browser();
if($browser == "ie"){
    //do stuff
}
16
Michael Jasper

HTTP_USER_AGENTサーバー変数を確認できます。 IEによって転送されたユーザーエージェントには、MSIEが含まれます

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }

特定のバージョンについては、条件を拡張できます

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }

この関連する質問 も参照してください。

14
Daff

私はこれをします

$u = $_SERVER['HTTP_USER_AGENT'];

$isIE7  = (bool)preg_match('/msie 7./i', $u );
$isIE8  = (bool)preg_match('/msie 8./i', $u );
$isIE9  = (bool)preg_match('/msie 9./i', $u );
$isIE10 = (bool)preg_match('/msie 10./i', $u );

if ($isIE9) {
    //do ie9 stuff
}
10
Vince Lowe
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|Edge/",$_SERVER['HTTP_USER_AGENT'])) {
// eh, IE found
}
5
xsor

PHPには、 get_browser() という関数があり、ユーザーのブラウザーとその機能に関する詳細を含むオブジェクト(または選択した場合は配列)を返します。

簡単に見てみると、このコードがわかりました。

$browser = get_browser( null, true );
if( $browser['name'] == "Firefox" )
    if( $browser['majorversion'] == 4 )
        echo "You're using Firefox version 4!";

これは確実な方法ではありません( HTTP_USER_AGENT から読み取られるため、スプーフィングされる可能性があり、PHPによって間違って分析されることもあります)が、私が知る限り、最も簡単な方法です。

5
Mike S

以下に、この記事からMSFTが推奨するjavascriptスニッフィングコードの正規表現を直接使用する小さなPHP関数を示します。 http://msdn.Microsoft.com/en-us/library/ms537509(v = vs.85) .aspx

/**
* Returns the version of Internet Explorer or false
*/
function isIE(){

    $isIE = preg_match("/MSIE ([0-9]{1,}[\.0-9]{0,})/",$_SERVER['HTTP_USER_AGENT'],$version);
    if($isIE){
        return $version[1];
    }
    return $isIE;

}
4
minorgod

PHPのget_browser();も調べることができます http://php.net/manual/en/function.get-browser.php

多分あなたはそれがより多くの機能に役立つと思うでしょう。

4
jolt

IEを検出するには、MSIEのみをチェックするだけでは不十分です。 IE11でのみ使用される「Trident」も必要です。そこで、バージョン8から11で動作する私のソリューションを紹介します。

$agent=strtoupper($_SERVER['HTTP_USER_AGENT']);
$isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);
3
Markus Zeller

これを行うには、user-agentヘッダーを解析します。

http://php.about.com/od/learnphp/p/http_user_agent.htm

これはあまり信頼性が高くなく、簡単になりすまされる可能性があることに注意してください。

2
Uku Loskit

'HTTP_USER_AGENT'現在のリクエストのUser-Agent:ヘッダーのコンテンツ(ある場合)。これは、ページにアクセスしているユーザーエージェントを示す文字列です。典型的な例:Mozilla/4.5 [en](X11; U; Linux 2.2.9 i586)。とりわけ、この値をget_browser()で使用して、ページの出力をユーザーエージェントの機能に合わせて調整できます。

そのため、$ _ SERVER ["HTTP_USER_AGENT"]変数からブラウザー名/ IDを取得できると想定しています。

2
arnehehe

さまざまなメッセージまたはdiv/cssにこのようなものを使用できます

<!--[if IE 6]>
<style type="text/css">
div.ie6 { display:block; }
</style>
<![endif]-->

<!--[if IE 7]>
<style type="text/css">
div.ie7 { display:block; }
</style>
<![endif]-->

<!--[if IE 8]>
<style type="text/css">
div.ie8 { display:block; }
</style>
<![endif]-->

<!--[if IE 9]>
message1
<![endif]-->

<!--[if !IE 6]>
message2
<![endif]-->

<!--[if lt IE 8]>
message3
<![endif]-->

または、CSSの異なるdivを使用します

<!--[if lte IE 8]>
<style type="text/css">
div.lteie8 { display:block; }
</style>
<![endif]-->

<!--[if gt IE 6]>
<style type="text/css">
div.gtie6 { display:block; }
</style>
<![endif]-->

<!--[if gte IE 6]>
<style type="text/css">
div.gteie6 { display:block; }
</style>
<![endif]-->
1
Enrico Tempesti

それでも便利です-そしてIE11で動作します!これは、cssクラスに対して返される一般的なブラウザを取得する別の簡単な方法です。

function get_browser()
{
    $browser = '';
    $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
    if (preg_match('~(?:msie ?|trident.+?; ?rv: ?)(\d+)~', $ua, $matches)) $browser = 'ie ie'.$matches[1];
    elseif (preg_match('~(safari|chrome|firefox)~', $ua, $matches)) $browser = $matches[1];

    return $browser;
}

したがって、この関数は「safari」または「firefox」または「chrome」、または「ie ie8」、「ie ie9」、「ie ie10」、「ie ie11」を返します。

それが役に立てば幸い

1
antoni

「Trident」のケースに注意してください。

if (isset($_SERVER['HTTP_USER_AGENT']) &&
    ((strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false)) {   
     // IE is here :-(
    }
0
Vlado

internet Explorer 11があり、タッチスクリーンPCで実行している場合は、preg_match( '/の代わりにpreg_match('/Trident/7.0; Touch; rv:11.0/'、$ _SERVER [' HTTP_USER_AGENT '])を使用する必要がありますTrident/7.0; rv:11.0/'、$ _SERVER [' HTTP_USER_AGENT '])