85 votes

PHP : Si internet explorer 6, 7, 8 ou 9

Je veux faire un conditionnel en PHP pour les différentes versions d’Internet Explorer dans le sens de :

``

J’ai vu beaucoup de variations sur un code similaire, mais vous cherchez quelque chose de super simple qui est très facile de code permettant d’effectuer quelques simples si et d’autre et faire des choses différentes.

Merci

EDIT : J’ai besoin de cela pour montrer des messages différents aux utilisateurs afin conditionnels CSS etc ne sont pas bons.

130voto

Cameron Points 2587

C’est ce que je me suis retrouvé en utilisant une variante de :

85voto

Doug Points 2004

Une version qui va continuer à travailler avec IE10:

preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);

if (count($matches)>1){
  //Then we're using IE
  $version = $matches[1];

  switch(true){
    case ($version<=8):
      //IE 8 or under!
      break;

    case ($version==9):
      //IE9!
      break;

    default:
      //You get the idea
  }
}

Edit: IE11 volonté de changer l'user agent de la syntaxe pour prévenir toutes les précédentes useragent reniflant de travail.

Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko

Si vous avez besoin d'être en mesure d'identifier IE11 (c'est rare, mais j'imagine qu'il y a des cas où c'est le cas), ce code devrait fonctionner:

preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
if(count($matches)<2){
  preg_match('/Trident\/\d{1,2}.\d{1,2}; rv:([0-9]*)/', $_SERVER['HTTP_USER_AGENT'], $matches);
}

if (count($matches)>1){
  //Then we're using IE
  $version = $matches[1];

  switch(true){
    case ($version<=8):
      //IE 8 or under!
      break;

    case ($version==9 || $version==10):
      //IE9 & IE10!
      break;

    case ($version==11):
      //Version 11!
      break;

    default:
      //You get the idea
  }
}

Remarque: Le IE11 code est basé sur le useragent fourni par le IE11 aperçu de la documentation. C'est tout à fait possible que le format peut changer avant IE11 lui-même, si elle le fait, le code ci-dessus, ne sera probablement pas fonctionner correctement pour IE11.

16voto

Michael Jasper Points 4089

Voici une excellente ressource pour détecter les navigateurs php: http://php.net/manual/en/function.get-browser.php

Voici l'un des exemples qui semble le plus simple:

 <?php
function get_user_browser()
{
    $u_agent = $_SERVER['HTTP_USER_AGENT'];
    $ub = '';
    if(preg_match('/MSIE/i',$u_agent))
    {
        $ub = "ie";
    }
    elseif(preg_match('/Firefox/i',$u_agent))
    {
        $ub = "firefox";
    }
    elseif(preg_match('/Safari/i',$u_agent))
    {
        $ub = "safari";
    }
    elseif(preg_match('/Chrome/i',$u_agent))
    {
        $ub = "chrome";
    }
    elseif(preg_match('/Flock/i',$u_agent))
    {
        $ub = "flock";
    }
    elseif(preg_match('/Opera/i',$u_agent))
    {
        $ub = "opera";
    }

    return $ub;
}
?>
 

Ensuite, dans votre code, vous pouvez dire quelque chose comme:

 $browser = get_user_browser();
if($browser == "ie"){
    //do stuff
}
 

16voto

Daff Points 22358

Vous pouvez vérifier la variable de serveur HTTP_USER_AGENT. L'agent utilisateur transféré par IE contient MSIE

 if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }
 

Pour des versions spécifiques, vous pouvez prolonger votre condition

 if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }
 

Voir aussi cette question connexe .

10voto

Vince Lowe Points 944
Je fais ça !

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X