Detecta a Internet Explorer con PHP

This post was published 10 years ago. It may be exremely outdated.

Introducción

Diseñar siguiendo los estándares es algo frustrante, ya que al completar el trabajo y “admirar” tu obra en Firefox, Opera, Safari o Google Chrome (entre otros), ves lo “maravillosamente bien” que queda, sin embargo al intentar verlo con IE ves una extraña página que sí, tiene colores parecidos a los que escogiste, pero no se parece en nada al original.

Dejando de lado el cachondeo, es una realidad que para Internet Explorer son necesarios algunos “trucos” para que la página se muestre bien.
Si estamos hartos de tener que hacer un CSS sólo para IE (y otro para IE 6) podemos optar por una solución diferente: mostrar un diseño diferente si el usuario entra con IE, y para esto usaremos PHP.

Objetivo del tutorial

Crearemos un diseño que si se accede con IE no mostrará los elementos que no son compatibles con él, y si se visita con otro navegador, sí se mostraran esos elementos.

A por el PHP

Comenzaremos creando una variable que contendrá el valor de $_SERVER[‘HTTP_USER_AGENT’], esto es opcional, pero es más cómo trabajar con una variable cuyo nombre es corto que con $_SERVER[‘HTTP_USER_AGENT’].

$user_agent = $_SERVER['HTTP_USER_AGENT'];

Usaremos la misma función que usamos en otro tutorial para detectar si existen los caracteres MSIE en la variable.

Si la variable contiene MSIE es porque el navegador es Internet Explorer.

Nota: Si contuviese Opera sería Opera (aunque no lo parezca 😉 ), si contuviese Chrome, Google Chrome, si contuviese Safari, Safari y si contuviese Firefox, pues Firefox.

Así que creamos otra variable que contendrá la posición de la cadena MSIE en la variable $user_agent (que hemos creado al principio del tutorial).

$posicion = strrpos($user_agent, "MSIE");

Si no está la cadena en la variable, la nueva variable tendrá por valor false, con lo que podemos establecer una condición sencilla:

Si la variable es false, no se ha entrado en la página con Internet Explorer, si por el contrario no es false, se está navegando con Internet Explorer.

En el caso de que sea false, crearemos una nueva variable: $ie, con el valor false (ya que no se está usando IE).
En el caso de que $posicion no sea false, creamos una la variable $ie, pero esta vez con valor true.

Dejando el siguiente código:

if ($posicion === false) {
$ie = false;
} else {
$ie = true;
}

Nota 2: Puede que os preguntéis por qué creo otra variable si con $posicion ya sabemos si se usa IE o no. Es sencillo. $posicion almacena la posición de MSIE, si se navegase con Internet Explorer, $posicion no sería true, sino que sería 25 (en el caso de IE 7, en versiones anteriores puede ser otro número).

Bien, con esa variable creada podemos determinar si se usa IE o no de forma muy sencilla:

if (!$ie) { echo 'No usas IE';  } else { echo 'Usas IE'; } /* DETERMINA PRIMERO SI NO SE USA IE */
if ($ie) { echo 'Usas IE';  } else { echo 'No usas IE'; } /* DETERMINA PRIMERO SI SE USA IE */

De esta forma podemos tener un diseño completamente distinto para Internet Explorer, o una versión muy modificada de nuestro diseño.

6 Responses to Detecta a Internet Explorer con PHP

Muy bueno el articulo. Yo hice uno hace tiempo parecido, con algunas peculiaridades más y lo metí todo en una clase PHP. Si os interesa:
&nbsp ;http://deckerix.tuxfamily.org/leerArticulo.php?post=24

hola, que tal, para los que no somos una lumbrera en estos temas y utilizamos wordpress, hay alguna alternativa? un plugin quizas?, como hacer esto?, detesto que pasar horas modificando y adaptando mis themes y al final del dia compruebo en IE y todo descuadrado y mal… seria genial que publicaran un metodo para lo antes cuestionado…

Pues no conozco ningún plugin así, pero tampoco parece demasiado difícil de crear uno.
Algo parecido, aunque no igual, es el plugin Anti Internet Explorer 6, que al navegar con IE 6 muestra una página de error.

Leave a Reply