2009-03-23 13 views
48

Gibt es eine Möglichkeit, PHP zu verwenden, um zu erkennen, ob die Seite mit IE6 geladen wird?Kann ich IE6 mit PHP erkennen?

+0

ein besonderer Grund Sie dies tun wollen – staticsan

+4

haha ​​läßt töten IE6 http : //www.bringdownie6.com/ – lock

+19

Weil es alt und zeitraubend ist, für zu entwickeln und manchmal möchten Sie nur umleiten, sie zu einer beschissenen, alten Version Ihrer Website.Online –

Antwort

65

Probieren Sie mal die User-Agent-Überprüfung für 'MSIE 6.' .

$using_ie6 = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== FALSE); 

Dies basiert auf this user agent information.

+8

Dies entspricht oft auch Opera, da Opera häufig "MSIE 6.0" in ihre User-Agent-Zeichenfolge einfügt. – thomasrutter

+3

Letzte Versionen von Opera haben NICHT (standardmäßig) MSIE 6.0 in der User-Agent-Zeichenfolge – philfreo

+2

In meinem Fall ist dies ein falscher positiver für alle MSIE-Browser, da alle "MSIE 6.0 kompatibel" auflisten, selbst wenn ihre Version tatsächlich ist höher. – Christian

28

Sie können IE6 erkennen mit HTML auf diese Weise

<!--[if IE 6]> 
// ie6 only stuff here 
<![endif]--> 

Here's a link on how it's done in PHPWay Back Machine aber ich habe in Parsen der $_SERVER["HTTP_USER_AGENT"] für IE6 viele Fehlalarme gesehen

+0

+1 beste Antwort –

+2

Dies kann manchmal nützlich sein, aber es ist nicht eigentlich eine Antwort auf die Frage. Es fragt, wie man das mit PHP macht. Der Benutzeragent könnte IE sein, aber möglicherweise wird HTML nicht gerendert. – Fuser97381

3

Sie können, mit der HTTP-User-Agent-Header, aber ich würde stark davon abraten, wenn möglich zu tun. Der User-Agent-Header ist sehr schwer genau zu analysieren und tendiert mit einfachem String-Matching zu falsch-positiven Ergebnissen - sogar wenn man das Problem von Browsern ignoriert, die vorgeben, andere Browser zu sein. Zum Beispiel entspricht die Zeichenfolge "MSIE 6." von Jeremy dem IE Mobile, der sich so sehr von IE6 unterscheidet, dass Sie diese im Allgemeinen nicht zusammenführen wollen.

Plus, wenn Sie verschiedene HTML an verschiedene Browser senden, müssen Sie die 'Vary' Header verwenden (wodurch Caches weniger effektiv), um zu vermeiden, dass Caches die falschen Seiten an verschiedene Browser senden.

Also, wenn Sie einen anderen Ort finden können, um die Browser-Differenzierung zu tun, die definitiv am besten ist. Ólafurs Ansatz mit bedingten Kommentaren ist normalerweise der einfachste Ansatz zum Ändern von JavaScript- und HTML-Markup/CSS-Links.

1

Danke Jungs, ich am Ende die folgende Funktion zu schaffen und nannte es nach Bedarf:

// IE6 Check 
function isIE() { 
    $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']); 
    if (ereg("msie 6.0", $userAgent)) { 
    return true; 
    } else { 
    return false; 
    } 
} 
+0

Kurzer Tipp: Verwenden Sie die Preg-Funktionen in PHP anstelle von ereg, sie sind schneller. http://uk.php.net/manual/en/function.preg-match.php – DisgruntledGoat

+4

Scratch, dass Sie keine reguläre Ausdruck-Funktion überhaupt verwenden sollten, wenn Sie nur nach dem Vorhandensein einer Zeichenfolge suchen. Verwenden Sie strpos, wie die obige Antwort vermuten lässt. – DisgruntledGoat

15

Viele der User-Agent-basierten Antworten auf dieser Seite sind nicht allzu zuverlässig, weil Opera identifiziert sich oft mit einem User-Agent-String "MSIE 6.0", wie enthalten:

Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; en) Opera 9.51 

Dies betrifft alle Versionen von Opera 5 bis 9 und sogar 10 Opera und kann ein- oder ausgeschaltet aus Opera gedreht werden. See this page.

Eine gängige Methode, die ich gesehen habe, ist für "MSIE" und gegen "Opera" zu testen. Zum Beispiel

if (preg_match('/\bmsie 6/i', $ua) && !preg_match('/\bopera/i', $ua)) 
    echo "We have IE6!"; 
+2

$ ua = $ _SERVER ['HTTP_USER_AGENT']; if (preg_match ('/ \ bmsie [56] \ ./ i', $ ua) &&! Preg_match ('/ \ b (oper | msie [789])/i', $ ua)) { echo ' IE 5 oder 6 '; } – andrem

+3

strpos() wird die Arbeit hier schneller erledigen. – Dunhamzzz

12

gut PHLAK ...

Ich denke, das ist viel besser: P

if(preg_match('/msie [2-6]/i',$_SERVER['HTTP_USER_AGENT'])) { 
    // if IE<=6 
    } else { 
    //if IE>6 
    } 
+0

Funktioniert gut, außer "preg" sollte "preg_match" sein. – kingjeffrey

+0

sry - i ate _match: P – marverix

+0

Die Syntax '/ msie [1-6]/i'' ist kürzer und ist wahrscheinlich für die meisten Menschen vertrauter. –

-1

Funktion ist preg_match() anstelle von Preg(), aber gut!

-1

Hinweis IE8 gibt auch an, dass IE6 in seiner User-Agent-Zeichenfolge kompatibel ist.

+0

Ich fand das vor kurzem wahr, als ein Benutzer mich kontaktierte, um zu sagen, dass sie IE8 verwendeten, aber ich entdeckte es als IE6. Ihre User-Agent-Zeichenfolge war dies: Mozilla/4.0 (kompatibel; MSIE 8.0; Windows NT 5.1; Trident/4.0; Mozilla/4.0 (kompatibel; MSIE 6.0; Windows NT 5.1; SV1); .NET CLR 2.0.50727) – neave

+0

Ich studierte dies und es scheint, dass es nur passiert, wenn der IE in Kompatibilitätsansicht ist. – Jonathan

0

sehr hilfreicher Thread. Ich habe dies verwendet, um die Deklaration für IE6 zu verbergen.nur stellt sich heraus IE6 die erste Zeile des Dokuments für Doctype prüft Schnüffeln, was bedeutet, dass, wenn der <?xml> String vorhanden ist, IE6 im Quirks-Modus übertragen werden, unabhängig von der Doctype im Anschluss an der <?xml> Erklärung

Ich bin nicht sicher, wenn sein Kritisch, um noch einen Opern-Check einzuschließen, aber haben es trotzdem aufgenommen.

//check if IE 6 or less 
$not_lte_ie6 = true; 
$ua = strtolower($_SERVER['HTTP_USER_AGENT']); 
if(strpos($ua,'msie') !== FALSE) { 
    if(strpos($ua,'opera') === FALSE) { 
     if(preg_match('/(?i)msie [1-6]/',$ua)) $not_lte_ie6 = false; 
    } 
} 
if ($not_lte_ie6) 
    echo "<?xml version='1.0' encoding='UTF-8'?>\n"; 
+0

Sollte das nicht === sein? – Benubird

1

Die aufgeführten Methoden werden oft mit bestimmten Browser-Flag-Plug-Ins (MathPlayer, zum Beispiel, wie auch einige von Malware Symbolleisten).

finde ich eine viel zuverlässigere Methode ist:

if(preg_match('/^Mozilla\/4\.0 \(compatible; MSIE 6/', $_SERVER['HTTP_USER_AGENT']) != 0) 
+0

Das Snippet im if gibt TRUE zurück, wenn IE6 erkannt wird. –

6

Wie alle anderen gesagt, es wird Fehlalarme werden, indem nur den User-Agent überprüft ... also warum nicht verwenden beide, Benutzer Agentenüberprüfung und ein bedingter Kommentar.

zum Beispiel ...

<? if (preg_match('/\bmsie 6/i', $_SERVER['HTTP_USER_AGENT']) { ?> 
    <!--[if IE 6]> 
    // ie6 only stuff here 
    <![endif]--> 
<? } ?> 

Auf diese Weise werden Sie nicht diesen unnötigen Code zu den meisten Browsern werden zurückschicken ... aber immer noch im Falle eines falsch-positiven sicher sein.

1

Etwas einfacher:

if(stristr(strtolower($_SERVER['HTTP_USER_AGENT']), "msie 6.0")) { 
    // IE6? Aren't you out of fashion yet? 
} 
0
function isOldIE() { 
    // don't support IE6 or below 
    return preg_match('/MSIE [1-6]/', $_SERVER['HTTP_USER_AGENT']); 
} 
2

Sie es für viele Browser verwenden können, aber es ist zeitaufwendig und manchmal falsch positive ...

function do_stylesheet_link() { 
// Picks up appropriate css file depending on the user-agent 

// if (stristr($_SERVER['HTTP_USER_AGENT'], 'Firefox')) { 
//echo '<link rel="stylesheet" href="css/firefox.css" type="text/css" />'; }  

//elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'Chrome')) { 
//echo '<link rel="stylesheet" href="css/chrome.css" type="text/css" />'; } 

//elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'Safari')) { 
//echo '<link rel="stylesheet" href="css/safari.css" type="text/css" />'; } 

//elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'Opera')) { 
//echo '<link rel="stylesheet" href="css/opera.css" type="text/css" />'; } 

    if (stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.')) { 
echo '<link rel="stylesheet" href="css/ie6.css" type="text/css" />'; } 

elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.')) { 
echo '<link rel="stylesheet" href="css/ie7.css" type="text/css" />'; } 

elseif (stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 8.')) { 
echo '<link rel="stylesheet" href="css/ie8.css" type="text/css" />'; } 

else { 
echo '<link rel="stylesheet" href="css/style.css" type="text/css" />'; 
} 

}

2

if(substr($_SERVER['HTTP_USER_AGENT'],0,34)=="Mozilla/4.0 (compatible; MSIE 6.0;") echo "I am stupid IE6";

IE 6 Startet immer mit "Mozilla/4.0 (kompatibel; ? MSIE 6.0;“ IE 7,8 hat "MSIE 6" in der Mitte ...

1
function isIE($versions=array()) { 
    if (!empty($versions)) 
     $versions = '('.implode('|',$versions).')'; 
    else 
     $versions = '1?\d'; 
    $ua = $_SERVER['HTTP_USER_AGENT']; 
    $is_not_opera = false===stripos($ua, 'opera'); 
    return $is_not_opera && preg_match('/\bmsie '.$versions.'\./i', $ua); 
} 

Verwendung:

$is_ie = isIE(); //Any version 
$is_ie_7 = isIE(array(7)); //IE 7 
$is_old_id = isIE(array(6,7));//IE 7 and 8 
Verwandte Themen