php internet-explorer-6 cross-browser

¿Puedo detectar IE6 con PHP?



internet-explorer-6 cross-browser (17)

¿Hay alguna manera de usar PHP para detectar si la página se está cargando con IE6?


Algo más simple:

if(stristr(strtolower($_SERVER[''HTTP_USER_AGENT'']), "msie 6.0")) { // IE6? Aren''t you out of fashion yet? }


Como todos los demás dijeron, habrá falsos positivos solo con verificar el agente de usuario ... entonces, ¿por qué no usar ambos , la verificación del agente de usuario y un comentario condicional?

por ejemplo...

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

De esta forma, no devolverá este código innecesario a la mayoría de los navegadores ... pero seguirá siendo seguro en caso de un falso positivo.


Gracias chicos, terminé creando la siguiente función y llamándola según sea necesario:

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


La función es preg_match () en lugar de preg (), ¡pero bien!


Los métodos enumerados a menudo marcan los navegadores con ciertos complementos (MathPlayer, por ejemplo, así como algunas barras de herramientas de malware).

Encuentro que un método mucho más confiable es:

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


Muchas de las respuestas basadas en agente de usuario en esta página no son demasiado confiables porque Opera a menudo se identifica con una cadena de agente de usuario que contiene "MSIE 6.0", como por ejemplo:

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

Esto afecta a todas las versiones de Opera 5 a 9 e incluso Opera 10 y se puede activar o desactivar desde Opera. Vea esta página .

Un enfoque común que he visto es probar para "MSIE" y contra "Opera". Por ejemplo,

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


Nota IE8 también especifica que es IE6 compatible en su cadena de agente de usuario.



Puede hacerlo, utilizando el encabezado HTTP User-Agent, pero le recomiendo que no lo haga si es posible. El encabezado User-Agent es muy difícil de analizar con precisión, y tiende a falsos positivos con una simple coincidencia de cadenas, incluso ignorando el problema de los navegadores que pretenden ser otros navegadores. Por ejemplo, la cadena "MSIE 6." de Jeremy coincidirá con IE Mobile, que es tan diferente de IE6 que generalmente no desea combinarlos.

Además, cuando envía diferentes HTML a diferentes navegadores, debe usar el encabezado ''Vary'' (que hace que las memorias caché sean menos efectivas) para evitar que las memorias caché envíen las páginas incorrectas a diferentes navegadores.

Entonces, si puede encontrar otro lugar para hacer la diferenciación del navegador, eso es definitivamente lo mejor. El enfoque de Ólafur con los comentarios condicionales suele ser el enfoque más simple para cambiar los enlaces de JavaScript y marcado HTML / CSS.



Puedes usarlo para muchos navegadores, pero lleva mucho tiempo y a veces es falso positivo ...

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" />''; }

}


bueno, PHLAK ...

Creo que este es mucho mejor: P

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


hilo muy útil. Usé esto para ocultar la declaración <?xml> para IE6. Resulta que IE6 solo verifica la primera línea del documento para el rastreo de doctype, lo que significa que si la cadena <?xml> está presente, IE6 se procesará en modo peculiar independientemente del tipo de documento que sigue a la declaración <?xml>

No estoy seguro si es crítico incluir un control de ópera aún, pero lo he incluido de todos modos.

//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";


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

IE 6 siempre comienza con "Mozilla / 4.0 (compatible; MSIE 6.0;" IE 7,8 tiene "MSIE 6" en el medio ...


Intente verificar su agente de usuario para ''MSIE 6.'' .

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

Esto se basa en esta información de agente de usuario .


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

Utilizando:

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


function isOldIE() { // don''t support IE6 or below return preg_match(''/MSIE [1-6]/'', $_SERVER[''HTTP_USER_AGENT'']); }