php - para - modo documento internet explorer 11
PHP: si Internet Explorer 6, 7, 8 o 9 (17)
Quiero hacer un condicional en PHP para las diferentes versiones de Internet Explorer a lo largo de las líneas de:
if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...
He visto muchas variaciones en código similar, pero buscando algo súper simple es muy fácil codificar para hacer algo simple y hacer cosas diferentes.
Gracias
EDITAR: Necesito esto para mostrar algunos mensajes diferentes a los usuarios, por lo que CSS condicionales, etc. no son buenos.
''HTTP_USER_AGENT'' Contenido del encabezado User-Agent: de la solicitud actual, si hay uno. Esta es una cadena que denota el agente de usuario que está accediendo a la página. Un ejemplo típico es: Mozilla / 4.5 [en] (X11; U; Linux 2.2.9 i586). Entre otras cosas, puede usar este valor con get_browser () para adaptar la salida de su página a las capacidades del agente de usuario.
Así que supongo que podrá obtener el nombre / id del navegador de la variable $ _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 el 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 tu código, podrías decir algo como
$browser = get_user_browser();
if($browser == "ie"){
//do stuff
}
Aquí hay una pequeña función php que escribí que usa la expresión regular directamente del código de snipting 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;
}
Esto es a lo que terminé usando una variación de, que busca IE8 y 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
}
La comprobación de MSIE solo no es suficiente para detectar IE. También necesita "Trident", que solo se usa en IE11. Así que aquí está mi solución que funcionó las versiones 8 a 11.
$agent=strtoupper($_SERVER[''HTTP_USER_AGENT'']);
$isIE=(strpos($agent,''MSIE'')!==false || strpos($agent,''TRIDENT'')!==false);
Observe 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 :-(
}
PHP tiene una función llamada get_browser() que devolverá un objeto (o matriz si así lo desea) con detalles sobre el navegador de los usuarios y lo que puede hacer.
Una simple mirada 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 manera segura (como se lee en HTTP_USER_AGENT , que puede ser falso, y algunas veces será analizado incorrectamente por php), pero es el más fácil que puedes encontrar hasta donde yo sé.
Puede hacer esto analizando el encabezado de usuario-agente:
http://php.about.com/od/learnphp/p/http_user_agent.htm
Tenga cuidado de que esto no sea muy confiable y pueda ser falsificado trivialmente.
Puede 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 diferentes div 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]-->
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) { ... }
También vea esta pregunta relacionada .
También puedes mirar el get_browser();
PHP get_browser();
http://php.net/manual/en/function.get-browser.php
Tal vez lo encuentres útil para más funciones.
Un enfoque basado en tridend 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;
}
?>
Una versión que continuará trabajando con IE10 e 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
}
}
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
}
pero sigue siendo útil, ¡y funciona con IE11! Aquí hay otra manera 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 retorna: ''safari'' o ''firefox'' o ''chrome'', o ''ie ie8'', ''ie ie9'', ''ie ie10'', ''ie ie11''.
Espero eso ayude
si tiene Internet Explorer 11 y se ejecuta en una PC 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 ''])
if (isset($_SERVER[''HTTP_USER_AGENT'']) && preg_match("/(?i)msie|trident|edge/",$_SERVER[''HTTP_USER_AGENT''])) {
// eh, IE found
}