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

  1. salut,

    il faut que tu teste sous safari, la variable $_SERVER['HTTP_USER_AGENT'], si elle contient bien "safari"
    0
    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?
      0
      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
        0
        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?
          0
          1. Re bonjour

            Quelqu'un pourrait m'aiguiller sur le script?

            Merci d'avance!
            0
            1. Remplace Ereg par strposn ça marche bien
              0
            2. Remplace Ereg par strposn ça marche bien
              0
          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\" />";
            }
            ?> 
            0
            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.
              0
              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
                0