User Agent confond Firefox et Safari

Azymes -  
 Romain -
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. clintm Messages postés 718 Statut Membre 75
     
    salut,

    il faut que tu teste sous safari, la variable $_SERVER['HTTP_USER_AGENT'], si elle contient bien "safari"
    0
  2. Azymes
     
    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
  3. clintm Messages postés 718 Statut Membre 75
     
    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
  4. Azymes
     
    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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Azymes
     
    Re bonjour

    Quelqu'un pourrait m'aiguiller sur le script?

    Merci d'avance!
    0
    1. Felysk
       
      Remplace Ereg par strposn ça marche bien
      0
    2. Felysk
       
      Remplace Ereg par strposn ça marche bien
      0
  7. Jean-François Pillou Messages postés 18961 Date d'inscription   Statut Webmaster Dernière intervention   63 308
     
    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
  8. WibiMaster Messages postés 31 Statut Membre 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. Romain
       
      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