Detectando navegadores con PHP
Saber el navegador con el que se accede a nuestras páginas web es algo muy útil. Lo podemos utilizar para cargar algo de CSS / Javascript específico para un navegador (como por ejemplo, para evitar errores con IE6), también lo podemos usar para cargar una página completamente distinta en navegadores antiguos y, ¿por qué no? para mostrar una página específica para móviles.
Ya he comentado este tema en otras ocasiones, pero esta vez ampliaré el rango de navegadores a detectar, concretamente nos centraremos en Internet Explorer, Firefox, Safari, Opera, Konqueror, Chrome, iPod Touch, iPhone, Android (vale, estos tres no son navegadores, pero en estos casos me refiero a detectar el sistema operativo) o cualquier tipo de navegador para móvil.
En esta ocasión crearemos una función que acepte dos parámetros: el navegador que queremos buscar y la versión específica que buscamos (si es que buscamos alguna versión en especial). Para el primer parámetro, usaremos una serie de identificadores:
Identificador | Navegador |
---|---|
IE | Internet Explorer |
FF | Firefox |
SF | Safari |
OP | Opera |
KQ | Konqueror |
CH | Chrome |
IPD | iPod |
IPH | iPhone |
IPO | iPod / iPhone |
AD | Android |
MB | Navegador de móvil |
Sobre la versión del navegador, sólo nos centraremos en las versiones de Internet Explorer.
La función seguirá la siguiente estructura:
- Cargamos en una variable el agente de usuario del visitante.
- Mediante un bucle foreach determinamos en qué navegador buscamos.
- Mediante la función strrpos comprobamos si el agente de usuario se corresponde con el del navegador que buscamos.
- Sólo si buscamos Internet Explorer: Detectamos si se ha accedido con la versión que hemos establecido (si es que hemos establecido alguna versión).
- Sólo si buscamos un navegador móvil: Buscamos alguno de los diversos agentes de usuario que tienen los diferentes navegadores para móviles.
- Devolvemos el valor true si se ha detectado el navegador en cuestión y false si no se ha detectado, a través de una variable que tiene por defecto el valor false y sólo cambia a true al detectarse el navegador.
Finalmente todo esto traducido a PHP quedaría así:
[php]
function is_browser($name, $version=”) {
$user_agent = $_SERVER[‘HTTP_USER_AGENT’]; // Cargamos el UserAgent en una variable
$wtr = false; // Esta variable es la que indica si se ha accedido con el navegador que buscamos o no. Por defecto es false, sólo cambia si se accede con el navegador buscado
$wtmb = ”; // Esta variable almacena el navegador del dispositivo móvil (sólo si buscamos un navegador de dispositivo móvil, esto no incluye ni Android ni iPod ni iPhone)
// Primero veamos a quién buscamos y luego comprobemos si es él
switch ($name) {
// Caso Internet Explorer
case ‘IE’:
if (strrpos($user_agent, "MSIE") === false) {} else {
if ($version != ”) {
if (strrpos($user_agent, ‘MSIE ‘.$version) === false) {} else { $wtr = true; }
} else {
$wtr = true;
}
}
break;
// Caso Firefox
case ‘FF’: if (strrpos($user_agent, "Firefox") === false) {} else { $wtr = true; } break;
// Caso Opera
case ‘OP’: if (strrpos($user_agent, "Opera") === false) {} else { $wtr = true; } break;
// Caso Konqueror
case ‘KQ’: if (strrpos($user_agent, "Konqueror") === false) {} else { $wtr = true; } break;
// Caso Chrome
case ‘CH’: if (strrpos($user_agent, "Chrome") === false) {} else { $wtr = true; } break;
// Caso Safari
case ‘SF’: if (strrpos($user_agent, "Safari") === false) {} else { $wtr = true; } break;
// Caso iPod
case ‘IPD’: if (strrpos($user_agent, "iPod") === false) {} else { $wtr = true; } break;
// Caso iPhone
case ‘IPH’: if (strrpos($user_agent, "iPhone") === false) {} else { $wtr = true; } break;
// Caso iPod o iPhone
case ‘IPO’:
if (strrpos($user_agent, "iPod") === false) {} else { $wtr = true; }
if (strrpos($user_agent, "iPhone") === false) {} else { $wtr = true; }
break;
// Caso Android
case ‘AD’: if (strrpos($user_agent, "Android") === false) {} else { $wtr = true; } break;
// Caso navegador móvil
case ‘MB’:
$mua = array(
‘PIE4’ => ‘compatible; MSIE 4.01; Windows CE; PPC; 240×320’,
‘PIE4_Smartphone’ => ‘compatible; MSIE 4.01; Windows CE; Smartphone;’,
‘PIE6’ => ‘compatible; MSIE 6.0; Windows CE;’,
‘Minimo’ => ‘Minimo’,
‘OperaMini’ => ‘Minimo’,
‘AvantGo’ => ‘AvantGo’,
‘Plucker’ => ‘Plucker’,
‘NetFront’ => ‘NetFront’,
‘SonyEricsson’ => ‘SonyEricsson’,
‘Nokia’ => ‘Nokia’,
‘Motorola’ => ‘mot-‘,
‘BlackBerry’ => ‘BlackBerry’,
‘WindowsMobile’ => ‘Windows CE’,
‘PPC’ => ‘PPC’,
‘PDA’ => ‘PDA’,
‘Smartphone’ => ‘Smartphone’,
‘Palm’ => ‘Palm’
);
foreach($mua as $nav => $ua){ if(strstr($user_agent, $ua) != false) { $wtmb = $nav; } }
if ($wtmb != ”) { $wtr = true; }
break;
// Caso genérico
default: $wtr = false; break;
}
return $wtr;
}
[/php]
Finalmente el uso es muy sencillo, basta con verificar el valor que devuelve la función, de modo que si buscamos, por ejemplo, a Opera, usaríamos el siguiente código:
[php]
if (is_browser(‘OP’)) {
/* Código específico para Opera */
} else {
/* Código para el resto de navegadores */
}
[/php]