Quiero hacer un condicional en PHP para las diferentes versiones de Internet Explorer en la línea de:
if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...
He visto muchas variaciones en código similar, pero busco algo súper simple que sea muy fácil de codificar para hacer algo simple si y más y hacer cosas diferentes.
Gracias
EDITAR: Necesito esto para mostrar algunos mensajes diferentes a los usuarios, por lo que los condicionales de CSS, etc.no son buenos.
Respuestas:
Esto es lo que terminé usando una variación de, que verifica IE8 y más abajo:
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 }
fuente
'/(?i)msie [2-8]/'
. ¿Realmente necesitas verificar el ie 1 ? Fue lanzado en 1995 y fue reemplazado por ie2 unos meses después.'/(?i)msie [1-8]\./'
Una versión que seguirá funcionando tanto con IE10 como con 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 } }
fuente
Trident\/\d{1,2}.\d{1,2};(.*)rv:([0-9]*)
y$version = $matches[1];
debe cambiarse a$version = ($matches[2] == 11)?$matches[2]:$matches[1];
. Puede ver un ejemplo de la expresión regular aquí: regexr.com/3fb4k.Puede verificar la variable de servidor HTTP_USER_AGENT. El agente de usuario transferido por IE contiene MSIE
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }
Para versiones específicas puede extender su condición
if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }
Consulte también esta pregunta relacionada .
fuente
preg_match('/Trident\/7.0; rv:11.0/', $_SERVER['HTTP_USER_AGENT'])
Aquí hay un gran recurso para detectar navegadores en php: http://php.net/manual/en/function.get-browser.php
Este es uno de los ejemplos que parece más 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; } ?>
Luego, más adelante en su código, podría decir algo como
$browser = get_user_browser(); if($browser == "ie"){ //do stuff }
fuente
hago esto
$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 }
fuente
PHP tiene una función llamada get_browser () que devolverá un objeto (o una matriz si así lo desea) con detalles sobre el navegador de los usuarios y lo que puede hacer.
Un simple vistazo me dio este código:
$browser = get_browser( null, true ); if( $browser['name'] == "Firefox" ) if( $browser['majorversion'] == 4 ) echo "You're using Firefox version 4!";
Esta no es una forma infalible (como se lee en HTTP_USER_AGENT , que puede ser falsificado y, a veces, php lo analizará incorrectamente), pero es la más fácil que puede encontrar hasta donde yo sé.
fuente
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) { // eh, IE found }
fuente
También puede buscar en http://php.net/manual/en/function.get-browser.php de PHP
get_browser();
Tal vez lo encuentre útil para más funciones.
fuente
Aquí hay una pequeña función php que escribí que usa la expresión regular directamente del código de rastreo de JavaScript sugerido por MSFT de este artículo: 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; }
fuente
Verificar solo MSIE no es suficiente para detectar IE. También necesita "Trident", que solo se utiliza en IE11. Así que aquí está mi solución que funcionó en las versiones 8 a 11.
$agent=strtoupper($_SERVER['HTTP_USER_AGENT']); $isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);
fuente
Puede hacer esto analizando el encabezado del agente de usuario:
http://php.about.com/od/learnphp/p/http_user_agent.htm
Tenga cuidado de que esto no es muy confiable y puede falsificarse trivialmente.
fuente
User Agent
se puede falsificar.User-Agent
, quiere recuperar el contenido de la página como si fuera realmente su agente de usuario. El resultado es lo que pidieron. No hay problema aqui.Así que supongo que podrá obtener el nombre / id del navegador de la variable $ _SERVER ["HTTP_USER_AGENT"].
fuente
Podría usar algo como esto para diferentes mensajes o 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]-->
O use div diferente 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]-->
fuente
pero sigue siendo útil, ¡y funciona con IE11! aquí hay otra forma corta de obtener los navegadores comunes devueltos para la clase 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; }
Entonces, esta función devuelve: 'safari' o 'firefox' o 'chrome', o 'ie ie8', 'ie ie9', 'ie ie10', 'ie ie11'.
Espero eso ayude
fuente
Note el caso en 'Trident':
if (isset($_SERVER['HTTP_USER_AGENT']) && ((strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false)) { // IE is here :-( }
fuente
si tiene Internet Explorer 11 y se ejecuta en una computadora con pantalla táctil, debe usar: preg_match ('/ Trident / 7.0; Touch; rv: 11.0 /', $ _SERVER ['HTTP_USER_AGENT']) en lugar de: preg_match ('/ Trident / 7.0; rv: 11.0 / ', $ _SERVER [' HTTP_USER_AGENT '])
fuente
Un enfoque basado en tridendos sería mejor. Aquí hay una función rápida para verificar IE 8.
<?php function is_IE8(){ if(strpos(str_replace(' ', '', $_SERVER['HTTP_USER_AGENT']),'Trident/4.0')!== FALSE){ return TRUE; }; return FALSE; } ?>
fuente