PHP: यदि इंटरनेट एक्सप्लोरर 6, 7, 8, या 9


86

मैं इंटरनेट एक्सप्लोरर के विभिन्न संस्करणों के लिए PHP में एक सशर्त करना चाहता हूं:

if($browser == ie6){ //do this} elseif($browser == ie7) { //dothis } elseif...

मैंने समान कोड पर कई विविधताएं देखी हैं, लेकिन कुछ सुपर सरल की तलाश में है जो कि कुछ सरल करने के लिए कोड को बहुत आसान है अगर और कुछ और अलग चीजें करते हैं।

धन्यवाद

EDIT: मुझे उपयोगकर्ताओं को कुछ अलग संदेश दिखाने के लिए इसकी आवश्यकता है ताकि CSS कंडीशन्स आदि अच्छे न हों।


4
क्या आप अलग सीएसएस की सेवा करना चाहते हैं? उस मामले में, सशर्त टिप्पणियों पर विचार करें । कम परेशानी
Pekka

1
जाहिरा तौर पर IE10 सशर्त बयानों का समर्थन नहीं करता है।
चार्लीएम

जवाबों:


130

यह वह है जिसका मैंने विभिन्न प्रकार का उपयोग करके समाप्त किया है, जो IE8 और उससे नीचे की जाँच करता है:

if (preg_match('/MSIE\s(?P<v>\d+)/i', @$_SERVER['HTTP_USER_AGENT'], $B) && $B['v'] <= 8) {
    // Browsers IE 8 and below
} else {
    // All other browsers
}

75
यह पैटर्न इंटरनेट एक्सप्लोरर 10 को इंटरनेट एक्सप्लोरर 1 के रूप में मान्यता देगा
अराजकता

2
मुझे लगता है कि ओपेरा के कुछ संस्करण इससे मेल खाएंगे, लेकिन 'ओपेरा' के लिए जाँच करके उन्हें फ़िल्टर किया जा सकता है।
लियाम

45
बस इसे बदलने के लिए '/(?i)msie [2-8]/'। क्या आपको वास्तव में अर्थात 1 की जांच करने की आवश्यकता है ? यह 1995 में जारी किया गया था और कुछ महीनों बाद ie2 द्वारा प्रतिस्थापित किया गया था।
लैंडन

8
मैंने इसे बदलकर [4-8] कर दिया। IE अद्यतन अधिक से अधिक बार-बार हो रहे हैं और मैं वास्तव में यह सुनिश्चित करना चाहता हूं कि मैं जिस वेब ऐप पर काम कर रहा हूं, उसके जीवनकाल के दौरान समान परिवर्तन नहीं करना है (क्योंकि इसमें केवल 3 साल का जीवनकाल है)। यदि कोई IE 5 या उससे कम के साथ वेब ब्राउज़ कर रहा है, तो उन्हें मेरे वेब ऐप को देखने की तुलना में अधिक समस्याएं हैं।
एडम एर्स्टेल

2
यदि आप सिर्फ एक अवधि जोड़ते हैं तो यह 10, 20, आदि के संस्करण की जांच के बिना कम संख्या के संस्करणों के लिए जाँच करेगा'/(?i)msie [1-8]\./'
michaellindahl

85

एक संस्करण जो IE10 और IE11 दोनों के साथ काम करना जारी रखेगा:

preg_match('/MSIE (.*?);/', $_SERVER['HTTP_USER_AGENT'], $matches);
if(count($matches)<2){
  preg_match('/Trident\/\d{1,2}.\d{1,2}; rv:([0-9]*)/', $_SERVER['HTTP_USER_AGENT'], $matches);
}

if (count($matches)>1){
  //Then we're using IE
  $version = $matches[1];

  switch(true){
    case ($version<=8):
      //IE 8 or under!
      break;

    case ($version==9 || $version==10):
      //IE9 & IE10!
      break;

    case ($version==11):
      //Version 11!
      break;

    default:
      //You get the idea
  }
}

2
मुझे यकीन नहीं है कि आपने स्विच स्टेटमेंट का उपयोग क्यों किया है जब ऐसा लगता है कि अगर यह एक उचित / अधिक उपयुक्त होगा, लेकिन यह बहुत अच्छा काम करता है। और जाहिरा तौर पर आप केवल वही थे जो पढ़ते थे कि ओपी अलग संस्करण समर्थन चाहते थे।
जेक

हमें वास्तव में IE को 11 सहित निशाना बनाना था और इसने खूबसूरती से काम किया
code_monk

IE11 उपयोगकर्ता एजेंट में नए उपकरणों के अलग-अलग गुण हो सकते हैं, जैसा कि यहाँ बताया गया है: github.com/woothee/woothee-java/issues/6। इसे ठीक करने के लिए, नियमित अभिव्यक्ति को इसे बदल दिया जाना चाहिए: Trident\/\d{1,2}.\d{1,2};(.*)rv:([0-9]*)और $version = $matches[1];इसे बदल दिया जाना चाहिए $version = ($matches[2] == 11)?$matches[2]:$matches[1];। आप यहां रेगेक्स का एक उदाहरण देख सकते हैं: regexr.com/3fb4k।
jdgregson

16

आप HTTP_USER_AGENT सर्वर चर की जाँच कर सकते हैं। IE द्वारा स्थानांतरित उपयोगकर्ता एजेंट में MSIE होता है

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) { ... }

विशिष्ट संस्करणों के लिए आप अपनी स्थिति का विस्तार कर सकते हैं

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE 6.') !== false) { ... }

इससे संबंधित प्रश्न भी देखें ।


IE11 के लिए @ डिक्सस आपको यह करना होगाpreg_match('/Trident\/7.0; rv:11.0/', $_SERVER['HTTP_USER_AGENT'])
एंड्रेस एसके

16

यहाँ php में ब्राउज़र का पता लगाने के लिए एक बढ़िया संसाधन है: http://php.net/manual/en/function.get-browser.php

यहाँ एक उदाहरण है जो सबसे सरल लगता है:

<?php
function get_user_browser()
{
    $u_agent = $_SERVER['HTTP_USER_AGENT'];
    $ub = '';
    if(preg_match('/MSIE/i',$u_agent))
    {
        $ub = "ie";
    }
    elseif(preg_match('/Firefox/i',$u_agent))
    {
        $ub = "firefox";
    }
    elseif(preg_match('/Safari/i',$u_agent))
    {
        $ub = "safari";
    }
    elseif(preg_match('/Chrome/i',$u_agent))
    {
        $ub = "chrome";
    }
    elseif(preg_match('/Flock/i',$u_agent))
    {
        $ub = "flock";
    }
    elseif(preg_match('/Opera/i',$u_agent))
    {
        $ub = "opera";
    }

    return $ub;
}
?>

फिर बाद में आपके कोड में आप कुछ ऐसा कह सकते हैं

$browser = get_user_browser();
if($browser == "ie"){
    //do stuff
}

1
क्या $ ub सेट करने का कोई कारण है, और फिर इसे अंत में लौटा दें। निश्चित रूप से यह अधिक कुशल है (कुछ अनावश्यक बाहर निकाल देता है यदि) चर सेट करने के बजाय ब्राउज़र का नाम वापस करना है।
w4etwetewtwet

1
कुछ सरल, स्टॉक ब्राउज़र परीक्षण, लेकिन यह अनुरोध जैसे संस्करणों को नहीं करता है ...
जेक

क्रोम useragent में सफारी शामिल है। इसलिए उपरोक्त परीक्षण में क्रोम को सफारी के रूप में रिपोर्ट करना चाहिए। आदेश उलटा होना चाहिए। पहले कीवर्ड क्रोम की जाँच करें।
एवरेज जो

10

मैं यह करता हूँ

$u = $_SERVER['HTTP_USER_AGENT'];

$isIE7  = (bool)preg_match('/msie 7./i', $u );
$isIE8  = (bool)preg_match('/msie 8./i', $u );
$isIE9  = (bool)preg_match('/msie 9./i', $u );
$isIE10 = (bool)preg_match('/msie 10./i', $u );

if ($isIE9) {
    //do ie9 stuff
}

मुझे यह संस्करण पसंद है, और विंडोज 8.1 पर IE11 के लिए शामिल करने के लिए इसे संशोधित किया है।
माइक कोरमेंडी

5

PHP में एक फ़ंक्शन है जिसे get_browser () कहा जाता है जो उपयोगकर्ताओं के ब्राउज़र के बारे में विवरण के साथ एक वस्तु (या यदि आप चुनते हैं तो सरणी और यह क्या कर सकता है।

इस कोड ने मुझे एक सरल रूप दिया:

$browser = get_browser( null, true );
if( $browser['name'] == "Firefox" )
    if( $browser['majorversion'] == 4 )
        echo "You're using Firefox version 4!";

यह एक निश्चित तरीका नहीं है (जैसा कि यह HTTP_USER_AGENT से पढ़ता है , जिसे ख़राब किया जा सकता है, और कभी-कभी php द्वारा गलत का विश्लेषण किया जाएगा), लेकिन यह सबसे आसान है जिसे आप जितना जानते हैं उतना ही पा सकते हैं।


2
काम करने के लिए सर्वर साइड कॉन्फ़िगरेशन की आवश्यकता है। मैं नहीं कर रहा हूँ यकीन है कि कैसे विश्वसनीय यह है उत्पादों को विभिन्न सर्वर पर चलाने के लिए
latvian

5
if (isset($_SERVER['HTTP_USER_AGENT']) && preg_match("/(?i)msie|trident|edge/",$_SERVER['HTTP_USER_AGENT'])) {
// eh, IE found
}

यह संस्करणों से मेल नहीं खाता (और IE 10 आदि से मेल खाएगा)
Oytun

4

आप PHP के http://php.net/manual/en/function.get-browser.php पर भी नज़र डाल सकते हैंget_browser();

शायद आप इसे और अधिक सुविधाओं के लिए उपयोगी पाएंगे।


3
साफ। लेकिन इसके लिए आपके php.ini में एक सेटिंग की आवश्यकता होती है जो कुछ उपयोगकर्ताओं के लिए एक समस्या हो सकती है।
जेक

4

यहाँ एक छोटा सा php फ़ंक्शन है जो मैंने लिखा है कि इस लेख से MSFT के सुझाए गए जावास्क्रिप्ट स्निफिंग कोड से सीधे रेक्स का उपयोग करता है: http://msdn.microsoft.com/en-us/library/ms537509(v=v885).aspx

/**
* Returns the version of Internet Explorer or false
*/
function isIE(){

    $isIE = preg_match("/MSIE ([0-9]{1,}[\.0-9]{0,})/",$_SERVER['HTTP_USER_AGENT'],$version);
    if($isIE){
        return $version[1];
    }
    return $isIE;

}

3

केवल MSIE के लिए जाँच करना IE का पता लगाने के लिए पर्याप्त नहीं है। आपको "ट्रिडेंट" भी चाहिए जो केवल IE11 में उपयोग किया जाता है। तो यहाँ मेरा समाधान है जो 8 से 11 के संस्करणों में काम करता है।

$agent=strtoupper($_SERVER['HTTP_USER_AGENT']);
$isIE=(strpos($agent,'MSIE')!==false || strpos($agent,'TRIDENT')!==false);

कृपया प्रश्न शीर्षक देखें।
जेमी बार्कर

2

आप उपयोगकर्ता-एजेंट हेडर को पार्स करके ऐसा कर सकते हैं:

http://php.about.com/od/learnphp/p/http_user_agent.htm

सावधान रहें कि यह बहुत विश्वसनीय नहीं है और तुच्छ रूप से खराब हो सकता है।


बस याद रखें कि User Agentनकली किया जा सकता है।
परिश्रम से काम करना

7
यदि उपयोगकर्ता उनका स्पूफ करना चाहता है User-Agent, तो वे पृष्ठ की सामग्री को फिर से प्राप्त करना चाहते हैं जैसे कि वास्तव में उनका उपयोगकर्ता-एजेंट था। नतीजा वही है जो उन्होंने मांगा था। यहाँ कोई समस्या नहीं है।
को ऑर्बिट

2

'HTTP_USER_AGENT' उपयोगकर्ता-एजेंट की सामग्री: वर्तमान अनुरोध से हैडर, यदि कोई है तो। यह उपयोगकर्ता एजेंट के लिए एक स्ट्रिंग है जो पृष्ठ तक पहुँच रहा है। एक विशिष्ट उदाहरण है: मोज़िला / 4.5 [en] (X11; यू; लिनक्स 2.2.9 i586)। अन्य बातों के अलावा, आप इस मूल्य का उपयोग उपयोगकर्ता एजेंट की क्षमताओं के लिए अपने पृष्ठ के आउटपुट को प्राप्त करने के लिए get_browser () के साथ कर सकते हैं।

इसलिए मुझे लगता है कि आप $ _SERVER ["HTTP_USER_AGENT"] चर से ब्राउज़र का नाम / आईडी प्राप्त कर सकेंगे।


1

आप विभिन्न संदेशों या div / css के लिए कुछ इस तरह का उपयोग कर सकते हैं

<!--[if IE 6]>
<style type="text/css">
div.ie6 { display:block; }
</style>
<![endif]-->

<!--[if IE 7]>
<style type="text/css">
div.ie7 { display:block; }
</style>
<![endif]-->

<!--[if IE 8]>
<style type="text/css">
div.ie8 { display:block; }
</style>
<![endif]-->

<!--[if IE 9]>
message1
<![endif]-->

<!--[if !IE 6]>
message2
<![endif]-->

<!--[if lt IE 8]>
message3
<![endif]-->

या सीएसएस के विभिन्न div का उपयोग करें

<!--[if lte IE 8]>
<style type="text/css">
div.lteie8 { display:block; }
</style>
<![endif]-->

<!--[if gt IE 6]>
<style type="text/css">
div.gtie6 { display:block; }
</style>
<![endif]-->

<!--[if gte IE 6]>
<style type="text/css">
div.gteie6 { display:block; }
</style>
<![endif]-->

1

लेकिन अभी भी उपयोगी है - और IE11 के साथ काम करता है! सीएसएस वर्ग के लिए आम ब्राउज़रों को वापस लाने का एक और संक्षिप्त तरीका है:

function get_browser()
{
    $browser = '';
    $ua = strtolower($_SERVER['HTTP_USER_AGENT']);
    if (preg_match('~(?:msie ?|trident.+?; ?rv: ?)(\d+)~', $ua, $matches)) $browser = 'ie ie'.$matches[1];
    elseif (preg_match('~(safari|chrome|firefox)~', $ua, $matches)) $browser = $matches[1];

    return $browser;
}

इसलिए यह फ़ंक्शन लौटता है: 'सफारी' या 'फ़ायरफ़ॉक्स' या 'क्रोम', या 'यानी' यानी ',' यानी '9 ',' यानी '10 ',' यानी '11 '।

आशा करता हूँ की ये काम करेगा


0

'त्रिशूल' में मामला देखें:

if (isset($_SERVER['HTTP_USER_AGENT']) &&
    ((strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) || strpos($_SERVER['HTTP_USER_AGENT'], 'Trident') !== false)) {   
     // IE is here :-(
    }

0

अगर आपके पास Internet Explorer 11 है और यह टच स्क्रीन पीसी पर चल रहा है, तो आपको उपयोग करना होगा: preg_match ('/ aident / 7.0; टच; rv: 11.0 /', $ _SERVER ['HTTP_USER_AGENT_]] के बजाय: preg_match (' / ' त्रिशूल / 7.0; आरवी: 11.0 / ', $ _SERVER [' HTTP_USER_AGENT '))


-1

एक ट्रिडेंड आधारित दृष्टिकोण बेहतर होगा। यहाँ IE 8 की जाँच के लिए एक त्वरित कार्य है।

<?php
function is_IE8(){
   if(strpos(str_replace(' ', '', $_SERVER['HTTP_USER_AGENT']),'Trident/4.0')!== FALSE){
       return TRUE;
   };
   return FALSE; 
} 
?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.