User Agent confond Firefox et Safari

Fermé
Azymes - 16 janv. 2008 à 11:18
 Romain - 20 août 2010 à 10:17
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!

8 réponses

clintm Messages postés 689 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 10 juin 2015 75
16 janv. 2008 à 14:23
salut,

il faut que tu teste sous safari, la variable $_SERVER['HTTP_USER_AGENT'], si elle contient bien "safari"
0
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
clintm Messages postés 689 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 10 juin 2015 75
16 janv. 2008 à 15:51
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
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Re bonjour

Quelqu'un pourrait m'aiguiller sur le script?

Merci d'avance!
0
Remplace Ereg par strposn ça marche bien
0
Remplace Ereg par strposn ça marche bien
0
clintm Messages postés 689 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 10 juin 2015 75
17 janv. 2008 à 19:20
salut,

il faut peut être remplacer ^ par quelque chose d'autre,

va voir : https://openclassrooms.com/fr/courses
0
Jean-François Pillou Messages postés 18707 Date d'inscription lundi 15 février 1999 Statut Webmaster Dernière intervention 16 février 2023 63 268
24 févr. 2009 à 13:25
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
WibiMaster Messages postés 29 Date d'inscription mercredi 10 juin 2009 Statut Membre Dernière intervention 30 mars 2010 1
11 juil. 2009 à 14:28
<?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
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