Un nuevo aporte, a ver si les gusta
Código PHP:
<?php
header("Content-type: text/css");
# contenido de la matriz: nombre, patrón, valor de la propiedad que debe cambiar (o nombre de la hoja de estilos específica para él)
# para más propiedades, simplemente se puede agregar elementos al vector...
$navegadores = array( array( 'Opera', 'Opera', 120 ),
array( 'Safari', 'Safari', 121 ),
array( 'Mozilla Firefox', '(Firebird)|(Firefox)', 122 ),
array( 'Galeon', 'Galeon', 123 ),
array( 'Konqueror', 'Konqueror', 128 ),
array( 'Mozilla', 'Gecko', 124 ),
array( 'MyIE', 'MyIE', 125 ),
array( 'Lynx', 'Lynx', 126 ),
array( 'Netscape', '(Mozilla/4\.(75|79|08|5|6))|(Netscape(6|8))', 127 ),
array( 'Internet Explorer 7', '(MSIE 7\.[0-9]+)', 129 ),
array( 'Internet Explorer 6', '(MSIE 6\.[0-9]+)', 130 ),
array( 'Internet Explorer 5', '(MSIE 5\.[0-9]+)', 131 ),
array( 'Internet Explorer 4', '(MSIE 4\.[0-9]+)', 132 )
);
function ObtenerNavegador($user_agent) {
global $navegadores;
foreach($navegadores as $indice => $navegador) {
if ( ereg($navegador[1], $user_agent))
return $indice;
}
return -1;
}
$navegador = ObtenerNavegador($_SERVER['HTTP_USER_AGENT']);
function valorCSS() {
global $navegador;
global $navegadores;
if ($navegador == -1) {
return $valor_por_defecto;
} else {
return $navegadores[ $navegador ][2];
}
}
?>
/* Comienzan los estilos normalmente */
div.enlace {
font-family: Verdana, Tahoma, Arial, Helvetica, sans-serif;
font-size: 11px;
font-weight: bold;
background: #777;
width : <?php echo valorCSS(); ?>px;
height: 30px;
line-height: 30px;
margin: 20px auto;
}
meta, me refería a que por el orden en el que está hecho el vector se va a comprobar primero que la cadena "User-Agent" contenga "Gecko", y si eso es verdadero se asigna como "Mozilla".
Y entonces, dado que Konqueror incluye "Gecko" en su identificación, se tomará como Mozilla.
Lo que decía del "orden" es lo que hice en este nuevo código: poner la búsqueda de "Konqueror" antes que la de "Gecko".
Otro detalle: quizás para ahorrar unos milisegundos se pueda organizar el vector según el uso de los navegadores: poner los más usados primero para ahorrar un par de llamadas a ereg.
Y un detalle más: cambié "eregi" por "ereg", en mis pruebas la comparación sin considerar mayúsculas y minúsculas es más lenta que la comparación "estricta".
Saludos.