Olá!
Trabalhando em um projeto de um cliente da Verticis, nos deparamos com um problema, a incompatibilidade do código em certos navegadores. Como resolver isto? Não poderia alterar o código-fonte e não desejava fazer alguma “gambiarra” para contornar a situação. Desta maneira, recorri ao PHP para resolver o problema.
Pesquisando na internet, encontrei informações sobre o a variável de servidor $_SERVER, que é um array contendo informações sobre o servidor e a conexão com o mesmo. Dentre das informações contidas, temos HTTP_USER_AGENT, que informa o conteúdo do header User-Agent.
O retorno desta função pode ser algo como o exemplo abaixo (irá variar de acordo com o navegador utilizado):
Mozilla/5.0 (Windows; U; Windows NT 5.1; pt-BR; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8 ( .NET CLR 3.5.30729) FirePHP/0.4
Bom, com estas informações, e com a ajuda da expressão regular, conseguimos realizar um browser checker, verificando alguns navegadores pré-definidos:
A saída será o navegador e sua respectiva versão. Basta manipular este código para sua necessidade.
Até a próxima!
*Post inspirado em “How to check the user’s browser type and platform”
30 de agosto de 2010, 17:53
O artigo está claro e bem escrito. Entretanto, cabe um pequeno alerta: o uso desse tipo de identificação está sujeito a erros, visto que depende de informação passada pelo navegador ao servidor (por conseguinte, adulterável). Se o problema for com incompatibilidade de código Javascript, o mais seguro a fazer é verificar se “objetos” e funções existem antes de serem chamados. Se o problema for com o layout ou design da página, a coisa pode se complicar um pouco (a menos que sejam usados hacks).
Obs.: para verificar como é fácil adulterar o user agent, basta acessar a página about:config do Firefox e procurar pelas configurações que começam com general.useragent
😉
14 de outubro de 2010, 16:06
Olá parceiro, muito legal seu artigo, estava precisando desta verificação de vários navegadores, parabéns pela postagem, gostaria de saber se você esta utilizando o sistema WordPress em seu site, para postar estes artigos, construí um blog a pouco tempo que gostaria de postar codificação desta maneira que você postou, dentro de uma espécie de box e que reconheça automaticamente o PHP, poderia me informar como eu faço este tipo de postagem?
Des de já agradeço a atenção
Abraços.
15 de outubro de 2010, 10:43
Olá Adriano,
obrigado pelo elogio e espero que o post tenha sido realmente proveitoso.
Estamos utilizando o WordPress 3.1 no blog sim. Para a formatação específica para códigos como você mencionou eu escolho primeiramente a formatação “Pré-formatado” na aba “Visual” de criação do Post. Em seguida, clico na aba “HTML” e, onde existe o texto pré-formatado “<pre>”, adiciono o atributo lang=”php”, ficando <pre lang=”php”>. Desta maneira o código será exibido como neste tutorial.
Você pode fazer a formatação para outras linguagens, como jsp e xml.
Abraços
11 de novembro de 2010, 01:40
Obrigado pelo código cara você salvou o tema que eu estava criando, pois tive que usar png 24bits em uma animação jquery e não tive como colocar essa imagem de background, o que evita usar a correção iepngfix, pois ela só trabalha em imagens de fundo.
Com seu código pude fazer uma verificação do navegador ie-6 e adicionar um caminho para só nele pegar a outra imagens menos bonita, mas feita em png-8 com indexcolor.
Ai funcionou perfeitamente, menos bonito um pouco para ie-6, mas totalemnte funcional, só perdeu mesmo as sombras do png-24 que dam um toque melhor ao visual.
Se interessar pra alguém deixou a minha solução, então o meu código ficou assim.
$useragent = $_SERVER['HTTP_USER_AGENT'];
if (preg_match('|MSIE ([0-9].[0-9]{1,2})|',$useragent,$matched)) {
$browser_version=$matched[1];
}
if($browser_version == 6.0) {
$i = '/images-ie';
}
na imagem em html deixei
src="/images/moni2.png"
se não for ie-6 não retorna nada na variável e não muda nada para os outrso navegadores, para o ie-6 adiciona a pasta /iamges-ie
bom, já são quase duas da manhã e só agora eu ganhei meu dia, graças a você.
Valeu mesmo.
11 de novembro de 2010, 14:03
Claudio,
que bom que o post lhe auxiliou a resolver seu problema!
Obrigado por compartilhar resolução conosco!
Abraços!
21 de novembro de 2010, 00:38
Muito obrigado pela explicação, consegui resolver com um plugin onde basta colocar a codificação entre [php]codificação[/php] e da tudo certo, mas muito obrigado pela dica pois não sabia como fazer por esta forma que você descreveu, e me desculpe pela demora na resposta, estive uns tempos ocupado, abraços.
19 de abril de 2011, 16:28
aaaaaah que show
adorei esse site
perfeito ;
28 de dezembro de 2011, 14:10
Muito legal o codigo coloquei em uma pagina de teste funcionou, agora como faço para colocar dentro de widget do meu blog ?
23 de março de 2012, 17:42
Cara isso me quebrou um ganho heim! Valew!
9 de abril de 2012, 12:16
Senhores,
O script ficou bem bacana, mas CUIDADO com a utilização para verificação de versão do INTERNET EXPLORER, pois na versão 8.0 do navegador ele pode indicar versão 7.0, devido, possivelmente, existir um modo de compatibilidade para páginas que trabalham melhor com o browser IE mais antigo.
20 de agosto de 2012, 12:59
Obrigado cara. Muito bacana o seu codigo.
23 de setembro de 2012, 14:39
obrigado 🙂
1 de novembro de 2012, 12:26
asasasasas
12 de outubro de 2012, 22:39
João Paulo,
Muito bom o seu o codigo; me ajudou muito a resolver um problema que eu tinha com um script que dava incompatibilidade com o IE em versões anteriores ao 9.0.
Obrigado e Abraços!
Flamaury
8 de novembro de 2012, 10:41
bom dia sou novo em php,
qual seria a função se eu quisesse direcionar cada navegador a uma pagina diferente
17 de janeiro de 2013, 22:14
Basta utilizar um header().
16 de abril de 2013, 13:03
João, usando esse seu código no Internet Explorer 10, ele retorna $browser = ‘other’. Ou seja, não está reconhecendo o IE 10. Eu não entendo de expressão regular por isso não adaptei aqui. Pode me ajudar?
16 de julho de 2013, 09:29
Estava com o mesmo problema, funcionou, valeu Guilherme!
31 de julho de 2013, 00:04
Wow! Um Post de mais de 3 anos e continua ajudando a galera! Acabou de me ajudar! 🙂 Vale brother!
9 de setembro de 2013, 13:07
Perfeito! Obrigado pelo tutorial!
29 de novembro de 2013, 13:12
Valeu mesmo cara, eu uso javascript e php, mas queria uma solução em php, esse código ajudou bastante.
29 de março de 2014, 17:14
é simples fazer isso, observe que cada navegador é identificado pelo proprio nome e a variavel de saida é $browser a que imprime a variavel… basta vc criar uma funcao abaixo de todo o codigo…
la vai a cola ai pessoal…
http://pastebin.com/7GsYD7uY
postei no pastebin porq este site nao aceita programacao nos comentarios!!!!!
18 de maio de 2014, 08:10
dei uma modificada pois não estava reconhecendo internet explorer 10 e 11 nem as novas versões do opera
http://pastebin.com/embed_js.php?i=fW09EZv0
quem quiser uma lista beeeem grande de agents pra ir adaptando no script segue abaixo
http://techpatterns.com/downloads/firefox/useragentswitcher.xml
19 de maio de 2014, 10:41
Obrigado João!
30 de maio de 2014, 21:35
Perfeito amigo !! Código 100% funcional. me ajudou muito !!
8 de fevereiro de 2015, 23:37
Deu uma melhorada no seu código:
$useragent = $_SERVER[‘HTTP_USER_AGENT’];// CHECANDO O NAVEGADOR UTILIZADO
if (preg_match(‘|MSIE ([0-9].[0-9]{1,2})|’,$useragent,$matched)) {
$browser_version=$matched[1];
$browser = ‘IE’;
} elseif(preg_match(‘|Firefox/([0-9.]+)|’,$useragent,$matched)) {
$browser_version=$matched[1];
$browser = ‘Firefox’;
} elseif(substr($useragent, 0, 5) == “Opera”) {
$posicao_inicial = strpos($useragent, “Version”) + strlen(“Version”);
$versao = substr($useragent, $posicao_inicial, 5);
$browser_version = $versao;
$browser = ‘Opera’;
} elseif(strrpos($useragent, ‘OPR’)) {
$posicao_inicial = strpos($useragent, ‘OPR’) + strlen(‘OPR’);
$browser_version= substr($useragent, $posicao_inicial, 5);
$browser = ‘Opera’;
} elseif(preg_match(‘|Chrome/([0-9.]+)|’,$useragent,$matched)) {
$browser_version=$matched[1];
$browser = ‘Chrome’;
} elseif(preg_match(‘|Safari/([0-9.]+)|’,$useragent,$matched)) {
$browser_version=$matched[1];
$browser = ‘Safari’;
} elseif(strrpos($useragent, ‘rv’)) {
$posicao_inicial = strpos($useragent, ‘rv’) + strlen(‘rv’);
$browser_version= substr($useragent, $posicao_inicial, 5);
$browser = ‘IE’;
} else {
$browser_version = “”;
$browser= ‘Desconhecido’;
}
$navegador = $browser.”_”.$browser_version;