PHP ile IE6 algılayabilir miyim?

15 Cevap php

Sayfa IE6 kullanarak yüklenen olup olmadığını tespit etmek için PHP kullanmak için bir yolu var mı?

15 Cevap

'MSIE 6.' için kendi kullanıcı ajan kontrol etmeyi deneyin.

$using_ie6 = (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== FALSE);

Bu this user agent information dayanmaktadır.

HTML ile bu şekilde IE6 algılayabilir

<!--[if IE 6]>
// ie6 only stuff here
<![endif]-->

Here's a link on how it's done in PHP Way Back Machine but I've seen many false positives in parsing the $_SERVER["HTTP_USER_AGENT"] IE6

Opera çoğu gibi "MSIE 6.0", içeren bir kullanıcı aracısı dizesi ile kendisini tanımlayan çünkü bu sayfada user-agent tabanlı cevaplar çoğu da güvenilir değildir:

Mozilla/4.0 (compatible; MSIE 6.0; X11; Linux i686; en) Opera 9.51

This affects all versions of Opera 5 through 9 and even Opera 10 and can be turned on or off from within Opera. See this page.

Ben gördüğüm bir ortak yaklaşım "MSIE" ve "Opera" karşı test etmektir. Örneğin,

if (preg_match('/\bmsie 6/i', $ua) && !preg_match('/\bopera/i', $ua))
  echo "We have IE6!";

iyi PHLAK ...

P: Ben bu çok daha iyi olduğunu düşünüyorum

  if(preg_match('/msie [2-6]/i',$_SERVER['HTTP_USER_AGENT'])) {
   // if IE<=6
  } else {
   //if IE>6
  }

Sen get_browser updated browscap.ini file ile kullanabilirsiniz.

Herkesin dediği gibi, will sadece kullanıcı aracısı kontrol ederek yanlış pozitif olması ... yani neden both, kullanıcı aracısı denetimi ve koşullu açıklama kullanmayın.

örneğin ...

<? if (preg_match('/\bmsie 6/i', $_SERVER['HTTP_USER_AGENT']) { ?>
  <!--[if IE 6]>
    // ie6 only stuff here
  <![endif]-->
<? } ?>

Bu şekilde en tarayıcılar için bu gereksiz kod geri gönderme olmayacaktır ... ama yine de bir yanlış pozitif durumunda güvenli olacaktır.

Sen can, HTTP User-Agent başlığı kullanılarak, ama ben şiddetle tavsiye ediyorum bunu yaparken değil mümkünse. User-Agent başlığının doğru ayrıştırmak için çok çok zordur, ve basit dize eşleme ile yanlış pozitif yönelik eğilimi - hatta diğer tarayıcılar taklit tarayıcıların sorunu görmezden. Örneğin Jeremy'nin "MSIE 6." Dizesi genellikle bunları conflate istemiyorum IE6 çok çok farklı IE Mobile, maç olacaktır.

Eğer farklı tarayıcılar için farklı HTML göndermek Artı, sen önbelleklerini farklı tarayıcılar için yanlış sayfaları göndermek önlemek için (önbelleğe az etkili yapar) 'Vary' başlığı kullanmak zorunda.

Kesinlikle en iyi tarayıcı farklılaşma yapmak için başka bir yer bulmak Yani eğer. Koşullu yorumlar ile Olafur yaklaşımı genellikle JavaScript ve HTML biçimlendirme / CSS bağlantıları değiştirmek için basit bir yaklaşımdır.

Birçok tarayıcılar için kullanabilirsiniz, ama o zaman alıcı ve bazen yanlış pozitif ...

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" />';
}

}

Teşekkürler çocuklar, ben aşağıdaki işlevi oluşturma ve gerektiğinde arama sona erdi:

// IE6 Check
function isIE() {
  $userAgent = strtolower($_SERVER['HTTP_USER_AGENT']);
  if (ereg("msie 6.0", $userAgent)) {
    return true;
  } else {
    return false;
  }
}

Listelenen yöntemler sık ​​sık olacak bazı eklentiler (örneğin MathPlayer; yanı sıra bazı kötü amaçlı araç çubuğu) ile bayrak tarayıcılar.

Ben çok daha güvenilir bir yöntem bulmak:

if( preg_match('/^Mozilla\/4\.0 \(compatible; MSIE 6/', $_SERVER['HTTP_USER_AGENT']) != 0 )

Basit bir şey:

if(stristr(strtolower($_SERVER['HTTP_USER_AGENT']), "msie 6.0")) {
    // IE6? Aren't you out of fashion yet?
}
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);
}

Kullanımı:

$is_ie = isIE(); //Any version
$is_ie_7 = isIE(array(7)); //IE 7
$is_old_id = isIE(array(6,7));//IE 7 and 8

çok yararlı konu. Ben IE6 için <?xml> beyanı gizlemek için bu kullanılır. IE6 sadece <?xml> dize varsa, IE6 aşağıdaki bağımsız DOCTYPE kültürlerinden modunda işlemek anlamına gelir ki, doctype koklama için belgenin ilk satırı denetler <?xml> çıkıyor deklarasyon

Ben emin değilim henüz bir opera kontrol dahil, fakat yine de dahil ettik kritik eğer.

//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";

Fonksiyonu yerine Gebe preg_match () (), ama iyi!

IE8 de onun kullanıcı aracısı dizesi IE6 uyumlu olduğunu belirtir unutmayın.