it-swarm.com.de

PHP: Wenn Internet Explorer 6, 7, 8 oder 9

Ich möchte in PHP eine Bedingung für die verschiedenen Versionen von Internet Explorer erstellen, die wie folgt lautet:

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

Ich habe viele Variationen von ähnlichem Code gesehen, aber ich habe nach etwas sehr Einfachem gesucht, das sehr einfach zu codieren ist, um ein paar einfache Dinge zu tun, wenn und sonst und um verschiedene Dinge zu tun.

Vielen Dank

BEARBEITEN: Ich brauche dies, um Benutzern verschiedene Nachrichten zu zeigen, damit CSS-Bedingungen usw. nicht gut sind.

82
Cameron

Am Ende habe ich eine Variante von verwendet, die nach IE8 und darunter sucht:

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
}
129
Cameron

Eine Version, die weiterhin mit IE10 und IE11 funktioniert:

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
  }
}
81
Doug

Hier ist eine großartige Ressource zum Erkennen von Browsern in PHP: http://php.net/manual/de/function.get-browser.php

Hier ist eines der Beispiele, das am einfachsten erscheint:

<?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;
}
?>

Dann könnten Sie später in Ihrem Code etwas sagen

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

Sie können die Servervariable HTTP_USER_AGENT überprüfen. Der von IE übertragene Benutzeragent enthält MSIE

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

Für bestimmte Versionen können Sie Ihren Zustand verlängern

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

Siehe auch diese verwandte Frage .

14
Daff

Ich mach das

$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

PHP hat eine Funktion namens get_browser () , die ein Objekt (oder ein Array, falls Sie dies wünschen) mit Details zum Browser des Benutzers und seinen Möglichkeiten zurückgibt.

Ein einfacher Durchblick gab mir diesen Code:

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

Dies ist kein todsicherer Weg (wie er aus HTTP_USER_AGENT liest, was gefälscht werden kann und manchmal von PHP falsch analysiert wird), aber es ist der einfachste Weg, den ich finden kann.

5
Mike S

Hier ist eine kleine PHP-Funktion, die ich geschrieben habe und die Regex direkt aus MSFTs vorgeschlagenem Javascript-Sniffing-Code aus diesem Artikel verwendet: 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

Sie können auch in die get_browser();http://php.net/manual/de/function.get-browser.php von PHP schauen

Vielleicht finden Sie es nützlich für weitere Funktionen.

4
jolt
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|Edge/",$_SERVER['HTTP_USER_AGENT'])) {
// eh, IE found
}
4
xsor

Die Überprüfung nur für MSIE reicht nicht aus, um den IE zu erkennen. Sie benötigen auch "Trident", das nur in IE11 verwendet wird. Also hier ist meine Lösung, die eine Version 8 bis 11 funktionierte.

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

Sie können dies tun, indem Sie den User-Agent-Header analysieren:

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

Seien Sie vorsichtig, dass dies nicht sehr zuverlässig ist und trivial gefälscht werden kann.

2
Uku Loskit

"HTTP_USER_AGENT" Inhalt des User-Agent: Header der aktuellen Anfrage, falls vorhanden. Dies ist eine Zeichenfolge, die den Benutzeragenten angibt, der auf die Seite zugreift. Ein typisches Beispiel ist Mozilla/4.5 [de] (X11; U; Linux 2.2.9 i586). Unter anderem können Sie diesen Wert mit get_browser () verwenden, um die Ausgabe Ihrer Seite an die Fähigkeiten des Benutzeragenten anzupassen. 

Ich gehe also davon aus, dass Sie den Browsernamen/die ID aus der Variablen "$ _SERVER [" HTTP_USER_AGENT "] erhalten können.

2
arnehehe

Sie könnten so etwas für verschiedene Nachrichten oder div/css verwenden

<!--[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]-->

ODER Verwenden Sie ein anderes div von css

<!--[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

aber immer noch nützlich - und funktioniert mit IE11! Hier ist ein weiterer kurzer Weg, um die gängigen Browser für die css-Klasse zurückzugeben:

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;
}

Diese Funktion gibt also Folgendes zurück: "Safari" oder "Firefox" oder "Chrome" oder "dh ie8", "ie9", "ie10", "ie11".

ich hoffe es hilft

1
antoni

Beachten Sie den Fall in '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

wenn Sie Internet Explorer 11 verwenden und über einen Touchscreen-PC laufen, müssen Sie Folgendes verwenden: preg_match ('/ Trident/7.0; berühren Sie; rv: 11.0 /', $ _SERVER ['HTTP_USER_AGENT']) statt: preg_match ('/ Trident/7.0; rv: 11.0 /', $ _SERVER ['HTTP_USER_AGENT'])