Je souhaite faire un conditionnel en PHP pour les différentes versions d'Internet Explorer du type:
if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...
J'ai vu de nombreuses variantes de code similaire, mais à la recherche de quelque chose de super simple qui est très facile à coder pour faire des choses simples si et autrement et faire des choses différentes.
Merci
EDIT: J'ai besoin de cela pour montrer différents messages aux utilisateurs, donc les conditions CSS, etc. ne sont pas bonnes.
Réponses:
C'est ce que j'ai fini par utiliser une variante de, qui vérifie IE8 et ci-dessous:
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 }
la source
'/(?i)msie [2-8]/'
. Avez-vous vraiment besoin de vérifier ie 1 ? Il a été publié en 1995 et a été remplacé par ie2 quelques mois plus tard.'/(?i)msie [1-8]\./'
Une version qui continuera à fonctionner avec IE10 et 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 } }
la source
Trident\/\d{1,2}.\d{1,2};(.*)rv:([0-9]*)
et$version = $matches[1];
doit être remplacée par$version = ($matches[2] == 11)?$matches[2]:$matches[1];
. Vous pouvez voir un exemple de regex ici: regexr.com/3fb4k.Vous pouvez vérifier la variable serveur HTTP_USER_AGENT. L'agent utilisateur transféré par IE contient MSIE
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }
Pour des versions spécifiques, vous pouvez prolonger votre condition
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }
Voir également cette question connexe .
la source
preg_match('/Trident\/7.0; rv:11.0/', $_SERVER['HTTP_USER_AGENT'])
Voici une excellente ressource pour détecter les navigateurs en php: http://php.net/manual/en/function.get-browser.php
Voici l'un des exemples qui semble le plus simple:
<?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; } ?>
Ensuite, plus tard dans votre code, vous pourriez dire quelque chose comme
$browser = get_user_browser(); if($browser == "ie"){ //do stuff }
la source
je fais ça
$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 }
la source
PHP a une fonction appelée get_browser () qui retournera un objet (ou un tableau si vous le souhaitez) avec des détails sur le navigateur des utilisateurs et ce qu'il peut faire.
Un simple coup d'œil m'a donné ce code:
$browser = get_browser( null, true ); if( $browser['name'] == "Firefox" ) if( $browser['majorversion'] == 4 ) echo "You're using Firefox version 4!";
Ce n'est pas un moyen infaillible (comme il se lit à partir de HTTP_USER_AGENT , qui peut être usurpé, et sera parfois mal analysé par php), mais c'est le plus simple que vous puissiez trouver pour autant que je sache.
la source
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) { // eh, IE found }
la source
Vous pouvez également consulter le http://php.net/manual/en/function.get-browser.php de PHP
get_browser();
Peut-être que vous le trouverez utile pour plus de fonctionnalités.
la source
Voici une petite fonction php que j'ai écrite qui utilise l'expression régulière directement à partir du code de reniflage javascript suggéré par MSFT dans cet article: 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; }
la source
Vérifier uniquement MSIE ne suffit pas pour détecter IE. Vous avez également besoin de "Trident" qui n'est utilisé que dans IE11. Voici donc ma solution qui fonctionnait sur les versions 8 à 11.
$agent=strtoupper($_SERVER['HTTP_USER_AGENT']); $isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);
la source
Vous pouvez le faire en analysant l'en-tête user-agent:
http://php.about.com/od/learnphp/p/http_user_agent.htm
Méfiez-vous du fait que cela n'est pas très fiable et peut être usurpé de manière triviale.
la source
User Agent
peut être truqué.User-Agent
, il souhaite récupérer le contenu de la page comme s'il s'agissait vraiment de son user-agent. Le résultat est ce qu'ils ont demandé. Aucun problème ici.Je suppose donc que vous serez en mesure d'obtenir le nom / identifiant du navigateur à partir de la variable $ _SERVER ["HTTP_USER_AGENT"].
la source
Vous pouvez utiliser quelque chose comme ça pour différents messages ou 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]-->
OU utilisez un div différent de 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]-->
la source
mais toujours utile - et fonctionne avec IE11! voici un autre moyen rapide de récupérer les navigateurs courants pour la classe 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; }
Donc cette fonction renvoie: 'safari' ou 'firefox' ou 'chrome', ou 'ie ie8', 'ie ie9', 'ie ie10', 'ie ie11'.
J'espère que cela aide
la source
Notez le cas dans 'Trident':
if (isset($_SERVER['HTTP_USER_AGENT']) && ((strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false)) { // IE is here :-( }
la source
si vous avez Internet Explorer 11 et qu'il fonctionne sur un PC à écran tactile, vous devez utiliser: preg_match ('/ Trident / 7.0; Touch; rv: 11.0 /', $ _SERVER ['HTTP_USER_AGENT']) au lieu de: preg_match ('/ Trident / 7.0; rv: 11.0 / ', $ _SERVER [' HTTP_USER_AGENT '])
la source
Une approche basée sur les tendances serait préférable. Voici une fonction rapide pour vérifier IE 8.
<?php function is_IE8(){ if(strpos(str_replace(' ', '', $_SERVER['HTTP_USER_AGENT']),'Trident/4.0')!== FALSE){ return TRUE; }; return FALSE; } ?>
la source