Est-il possible d'utiliser PHP pour détecter si la page est en cours de chargement à l'aide d'IE6?
Essayez de vérifier leur agent utilisateur pour 'MSIE 6.'
.
$using_ie6 = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== FALSE);
Ceci est basé sur cette information sur l'agent utilisateur .
Vous pouvez détecter IE6 avec HTML de cette façon
<!--[if IE 6]>
// ie6 only stuff here
<![endif]-->
Voici un lien sur la façon dont cela est fait dans PHPWay Back Machine mais j'ai vu beaucoup de faux positifs dans l'analyse du $_SERVER["HTTP_USER_AGENT"]
pour IE6
De nombreuses réponses basées sur l'agent utilisateur sur cette page ne sont pas très fiables car Opera s'identifie souvent avec une chaîne d'agent utilisateur contenant "MSIE 6.0", telle que:
Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; en) Opera 9.51
Ceci affecte toutes les versions d'Opera 5 à 9 et même Opera 10 et peut être activé ou désactivé à partir d'Opera. Voir cette page .
Une approche courante que j'ai vue est de tester "MSIE" et contre "Opera". Par exemple,
if (preg_match('/\bmsie 6/i', $ua) && !preg_match('/\bopera/i', $ua))
echo "We have IE6!";
bien PHLAK ...
je pense que celui-ci est bien meilleur: P
if(preg_match('/msie [2-6]/i',$_SERVER['HTTP_USER_AGENT'])) {
// if IE<=6
} else {
//if IE>6
}
Vous pouvez utiliser get_browser avec le fichier browscap.ini mis à jour .
Comme tout le monde le dit, il y aura des faux positifs en vérifiant simplement l'agent utilisateur ... alors pourquoi ne pas utiliser both, la vérification de l'agent utilisateur et un commentaire conditionnel.
par exemple...
<? if (preg_match('/\bmsie 6/i', $_SERVER['HTTP_USER_AGENT']) { ?>
<!--[if IE 6]>
// ie6 only stuff here
<![endif]-->
<? } ?>
De cette façon, vous ne renverrez pas ce code inutile à la plupart des navigateurs ... mais vous serez toujours en sécurité en cas de faux positif.
Vous pouvez , en utilisant l'en-tête HTTP User-Agent, mais je vous déconseille fortement de le faire si possible. L’en-tête User-Agent est très très difficile à analyser avec précision, et tend à créer des faux positifs avec une simple correspondance de chaîne - même en ignorant le problème des navigateurs qui prétendent être d’autres navigateurs. Par exemple, la chaîne «MSIE 6» de Jeremy correspondra à IE Mobile, qui est tellement différent de IE6 que vous ne voulez généralement pas les fusionner.
De plus, lorsque vous envoyez différents fichiers HTML à différents navigateurs, vous devez utiliser l’en-tête ‘Vary’ (qui rend les caches moins efficaces) pour éviter que les caches envoient les mauvaises pages à différents navigateurs.
Donc, si vous pouvez trouver un autre endroit pour faire la différenciation du navigateur qui est définitivement le meilleur. L'approche d'Ólafur avec des commentaires conditionnels est généralement l'approche la plus simple pour modifier les liens JavaScript et les balises HTML/CSS.
if(substr($_SERVER['HTTP_USER_AGENT'],0,34)=="Mozilla/4.0 (compatible; MSIE 6.0;")
echo "I am stupid IE6";
IE 6 commence toujours par "Mozilla/4.0 (compatible; MSIE 6.0;" IE 7,8 comporte "MSIE 6" au milieu ...
Vous pouvez l'utiliser pour de nombreux navigateurs, mais cela prend beaucoup de temps et parfois de faux positifs ...
function do_stylesheet_link() {
// Picks up appropriate css file depending on the user-agent
// if ( stristr($_SERVER['HTTP_USER_AGENT'], 'Firefox') ) {
//echo '<link rel="stylesheet" href="css/firefox.css" type="text/css" />'; }
//elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Chrome') ) {
//echo '<link rel="stylesheet" href="css/chrome.css" type="text/css" />'; }
//elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Safari') ) {
//echo '<link rel="stylesheet" href="css/safari.css" type="text/css" />'; }
//elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'Opera') ) {
//echo '<link rel="stylesheet" href="css/opera.css" type="text/css" />'; }
if ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') ) {
echo '<link rel="stylesheet" href="css/ie6.css" type="text/css" />'; }
elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 7.') ) {
echo '<link rel="stylesheet" href="css/ie7.css" type="text/css" />'; }
elseif ( stristr($_SERVER['HTTP_USER_AGENT'], 'MSIE 8.') ) {
echo '<link rel="stylesheet" href="css/ie8.css" type="text/css" />'; }
else {
echo '<link rel="stylesheet" href="css/style.css" type="text/css" />';
}
}
function isIE($versions=array()) {
if (!empty($versions))
$versions = '('.implode('|',$versions).')';
else
$versions = '1?\d';
$ua = $_SERVER['HTTP_USER_AGENT'];
$is_not_opera = false===stripos($ua, 'opera');
return $is_not_opera && preg_match('/\bmsie '.$versions.'\./i', $ua);
}
En utilisant:
$is_ie = isIE(); //Any version
$is_ie_7 = isIE(array(7)); //IE 7
$is_old_id = isIE(array(6,7));//IE 7 and 8
Les méthodes répertoriées signalent souvent les navigateurs avec certains plug-ins (MathPlayer, par exemple; ainsi que certaines barres d'outils de programmes malveillants).
Je trouve une méthode beaucoup plus fiable est:
if( preg_match('/^Mozilla\/4\.0 \(compatible; MSIE 6/', $_SERVER['HTTP_USER_AGENT']) != 0 )
Merci les gars, j'ai fini par créer la fonction suivante et l'appeler au besoin:
// IE6 Check
function isIE() {
$userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
if (ereg("msie 6.0", $userAgent)) {
return true;
} else {
return false;
}
}
Quelque chose de plus simple:
if(stristr(strtolower($_SERVER['HTTP_USER_AGENT']), "msie 6.0")) {
// IE6? Aren't you out of fashion yet?
}
fil très utile. J'ai utilisé cela pour masquer la déclaration <?xml>
pour IE6. En fait, IE6 ne vérifie que la première ligne du document pour le sniffing de doctype, ce qui signifie que si la chaîne <?xml>
est présente, IE6 sera affiché en mode quirks quel que soit le doctype suivant la déclaration <?xml>
Je ne sais pas s'il est essentiel d'inclure un chèque d'opéra pour le moment, mais je l'ai quand même inclus.
//check if IE 6 or less
$not_lte_ie6 = true;
$ua = strtolower($_SERVER['HTTP_USER_AGENT']);
if(strpos($ua,'msie') !== FALSE) {
if(strpos($ua,'opera') === FALSE) {
if(preg_match('/(?i)msie [1-6]/',$ua)) $not_lte_ie6 = false;
}
}
if ($not_lte_ie6)
echo "<?xml version='1.0' encoding='UTF-8'?>\n";
function isOldIE() {
// don't support IE6 or below
return preg_match('/MSIE [1-6]/', $_SERVER['HTTP_USER_AGENT']);
}