User Agent confond Firefox et Safari

Bonjour,

J'ai insérer ce script suivant pour pouvoir appliquer une feuille de style différente en fonction du navigateur:

<html>
<head>
<?
//$_SERVER["HTTP_USER_AGENT"] : variable donnant le navigateur
if (ereg("MSIE", $_SERVER["HTTP_USER_AGENT"])) {
//Internet explorer
echo "<link rel=\"stylesheet\" href=\" ie.css\" type=\"text/css\" />";
} else if (ereg("^Mozilla/", $_SERVER["HTTP_USER_AGENT"])) {
//Mozilla - Firefox
echo "<link rel=\"stylesheet\" href=\" style.css\" type=\"text/css\" />";
} else if (ereg("^Opera/", $_SERVER["HTTP_USER_AGENT"])) {
//Opera
echo "<link rel=\"stylesheet\" href=\" opera.css\" type=\"text/css\" />";
} else if (ereg("^Safari/", $_SERVER["HTTP_USER_AGENT"])) {
//Safari
echo "<link rel=\"stylesheet\" href=\"safari.css\" type=\"text/css\" />";
}
?>

Le problème, c'est que Safari récupère la feuille de style de Firefox, alors que je lui ai créer une feuille de style propre à lui. Peut etre que le problème vient de mon script? Pourtant, IE et Opera détectent bien leur feuille de style à eux.

Je remercie d'avance ceux ou celles qui pourront m'aiguiller sur mon petit problème!
Configuration: Windows XP
Firefox 2.0.0.11

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. salut,

    il faut que tu teste sous safari, la variable $_SERVER['HTTP_USER_AGENT'], si elle contient bien "safari"
    1. Bonjour

      Quand je visite www.useragent.org avec le navigateur SAFARI, voici ce que le site m'indique:

      Your User Agent is: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr) AppleWebKit/522.15.5 (KHTML, like Gecko) Version/3.0.3 Safari/522.15.5

      Je ne sais pas si cela réponds à ta question?
      1. salut,

        oui c'est normal car dans ton expression régulière, le terme Safari doit être en premier:
        ^Safari

        or "safari" ce trouve dans la chaine
        Mozilla/5.0 (Windows; U; Windows NT 5.1; fr) AppleWebKit/522.15.5 (KHTML, like Gecko) Version/3.0.3 Safari/522.15.5
        1. Bonjour

          J'ai enlevé le ^ comme indiqué. Voici donc le nouveau script:

          <?
          //$_SERVER["HTTP_USER_AGENT"] : variable donnant le navigateur
          if (ereg("MSIE", $_SERVER["HTTP_USER_AGENT"])) {
          //Internet explorer
          echo "<link rel=\"stylesheet\" href=\" ie.css\" type=\"text/css\" />";
          } else if (ereg("^Mozilla/", $_SERVER["HTTP_USER_AGENT"])) {
          //Mozilla - Firefox
          echo "<link rel=\"stylesheet\" href=\" style.css\" type=\"text/css\" />";
          } else if (ereg("^Opera/", $_SERVER["HTTP_USER_AGENT"])) {
          //Opera
          echo "<link rel=\"stylesheet\" href=\" opera.css\" type=\"text/css\" />";
          } else if (ereg("Safari/", $_SERVER["HTTP_USER_AGENT"])) {
          //Safari
          echo "<link rel=\"stylesheet\" href=\"safari.css\" type=\"text/css\" />";
          }
          ?>

          Cependant, Safari récupére toujours la mauvaise feuille de style (celle de firefox). Y a t il une autre erreur dans le script?
          1. Re bonjour

            Quelqu'un pourrait m'aiguiller sur le script?

            Merci d'avance!
            1. Remplace Ereg par strposn ça marche bien
            2. Remplace Ereg par strposn ça marche bien
          2. Webmaster
            C'est surtout que "Mozilla" est présent dans la plupart des chaînes de User-Agent, y compris Safari.

            Soit tu mets ce test en dernier :

            <?
            //$_SERVER["HTTP_USER_AGENT"] : variable donnant le navigateur
            if (ereg("MSIE", $_SERVER["HTTP_USER_AGENT"])) {
            //Internet explorer
            echo "<link rel=\"stylesheet\" href=\" ie.css\" type=\"text/css\" />";
            }  else if (ereg("^Opera/", $_SERVER["HTTP_USER_AGENT"])) {
            //Opera
            echo "<link rel=\"stylesheet\" href=\" opera.css\" type=\"text/css\" />";
            } else if (ereg("Safari/", $_SERVER["HTTP_USER_AGENT"])) {
            //Safari
            echo "<link rel=\"stylesheet\" href=\"safari.css\" type=\"text/css\" />";
            }
            else if (ereg("^Mozilla/", $_SERVER["HTTP_USER_AGENT"])) {
            //Mozilla - Firefox
            echo "<link rel=\"stylesheet\" href=\" style.css\" type=\"text/css\" />";
            }
            ?> 


            Soit tu testes la chaîne "Firefox" :

            <?
            //$_SERVER["HTTP_USER_AGENT"] : variable donnant le navigateur
            if (ereg("MSIE", $_SERVER["HTTP_USER_AGENT"])) {
            //Internet explorer
            echo "<link rel=\"stylesheet\" href=\" ie.css\" type=\"text/css\" />";
            } else if (ereg("Firefox/", $_SERVER["HTTP_USER_AGENT"])) {
            //Mozilla - Firefox
            echo "<link rel=\"stylesheet\" href=\" style.css\" type=\"text/css\" />";
            } else if (ereg("Opera/", $_SERVER["HTTP_USER_AGENT"])) {
            //Opera
            echo "<link rel=\"stylesheet\" href=\" opera.css\" type=\"text/css\" />";
            } else if (ereg("Safari/", $_SERVER["HTTP_USER_AGENT"])) {
            //Safari
            echo "<link rel=\"stylesheet\" href=\"safari.css\" type=\"text/css\" />";
            }
            ?> 
            1. <?php
              $string = $HTTP_USER_AGENT;
              if(eregi('MSIE 6', $string)){
              if((eregi('MSIE 7', $string))||(eregi('MSIE 8',$string))){
              $style="style_ie7-8.css";}
              else{
              $style="style_ie6.css";}
              }
              elseif(eregi('Mozilla/5', $string))
              {
              if(eregi('Firefox/2', $string)){
              $style="style_firefox2.css";}
              elseif(eregi('Firefox/3', $string)){
              $style="style_firefox3.css";}
              elseif(eregi('Safari', $string)){
              if(eregi('Chrome', $string)){
              $style="style_google-chrome.css";}
              else{
              $style="style_safari.css";}
              }
              else{
              $style="style_defaut.css";}
              }
              elseif(eregi('Opera', $string)){
              $style="style_opera.css";}
              else{
              $style="style_defaut.css";}
              ?>

              Ça choisi le style en fonction de IE6, IE7-8, FF2, FF3, Safari, Opera, Google Chrome. Plus un style par défaut (celui de FireFox conseillé) pour les autres navigateurs au cas où.

              Si ça peut aider... Ce serait bien de mettre le sujet résolu.
              1. Ne pas utiliser eregi, elle n'est plus prise en compte depuis PHP 5.3 et sera totalement supprimé avec PHP6. Penssez à preg_match ou strposn.

                Romain