Nasıl PHP veya JavaScript ile tarayıcı algılayabilir?

12 Cevap php

Kullanıcı JavaScript veya PHP kullanarak tarayıcılar Chrome, Firefox veya Internet Explorer herhangi birini kullanarak değilse nasıl tespit edebilirsiniz?

12 Cevap

Ben buldum JS bunu yapmanın en iyi yolu, Quirksmode açıktır. Ben ortak tarayıcılar ile çalışması gerektiğini PHP için bir tane yaptı:

  $browser = array(
    'version'   => '0.0.0',
    'majorver'  => 0,
    'minorver'  => 0,
    'build'     => 0,
    'name'      => 'unknown',
    'useragent' => ''
  );

  $browsers = array(
    'firefox', 'msie', 'opera', 'chrome', 'safari', 'mozilla', 'seamonkey', 'konqueror', 'netscape',
    'gecko', 'navigator', 'mosaic', 'lynx', 'amaya', 'omniweb', 'avant', 'camino', 'flock', 'aol'
  );

  if (isset($_SERVER['HTTP_USER_AGENT'])) {
    $browser['useragent'] = $_SERVER['HTTP_USER_AGENT'];
    $user_agent = strtolower($browser['useragent']);
    foreach($browsers as $_browser) {
      if (preg_match("/($_browser)[\/ ]?([0-9.]*)/", $user_agent, $match)) {
        $browser['name'] = $match[1];
        $browser['version'] = $match[2];
        @list($browser['majorver'], $browser['minorver'], $browser['build']) = explode('.', $browser['version']);
        break;
      }
    }
  }

Burada kolayca tarayıcı algılamak hangi aracılığıyla JavaScript kodudur.

    var userAgent = navigator.userAgent.toLowerCase();

    // Figure out what browser is being used.
    var Browser = {
        Version: (userAgent.match(/.+(?:rv|it|ra|ie)[\/: ]([\d.]+)/) || [])[1],
        Chrome: /chrome/.test(userAgent),
        Safari: /webkit/.test(userAgent),
        Opera: /opera/.test(userAgent),
        IE: /msie/.test(userAgent) && !/opera/.test(userAgent),
        Mozilla: /mozilla/.test(userAgent) && !/(compatible|webkit)/.test(userAgent),
        Check: function() { alert(userAgent); }
    };

    if (Browser.Chrome || Browser.Mozilla) {
        // Do your stuff for Firefox and Chrome.
    }
    else if (Browser.IE) {
        // Do something related to Internet Explorer.
    }
    else {
        // The browser is Safari, Opera or some other.
    }

Bunun için PHP bir işlev aslında var, get_browser.

get_browser() PHP kodu benim için tamamen çalışıyor ;)

<?php
    function getBrowser()
    {
        $u_agent = $_SERVER['HTTP_USER_AGENT'];
        $bname = 'Unknown';
        $platform = 'Unknown';
        $version= "";

        //First get the platform?
        if (preg_match('/linux/i', $u_agent)) {
            $platform = 'linux';
        }
        elseif (preg_match('/macintosh|mac os x/i', $u_agent)) {
            $platform = 'mac';
        }
        elseif (preg_match('/windows|win32/i', $u_agent)) {
            $platform = 'windows';
        }

        // Next get the name of the useragent yes separately and for good reason.
        if (preg_match('/MSIE/i',$u_agent) && !preg_match('/Opera/i',$u_agent))
        {
            $bname = 'Internet Explorer';
            $ub = "MSIE";
        }
        elseif (preg_match('/Firefox/i',$u_agent))
        {
            $bname = 'Mozilla Firefox';
            $ub = "Firefox";
        }
        elseif (preg_match('/Chrome/i',$u_agent))
        {
            $bname = 'Google Chrome';
            $ub = "Chrome";
        }
        elseif (preg_match('/Safari/i',$u_agent))
        {
            $bname = 'Apple Safari';
            $ub = "Safari";
        }
        elseif (preg_match('/Opera/i',$u_agent))
        {
            $bname = 'Opera';
            $ub = "Opera";
        }
        elseif (preg_match('/Netscape/i',$u_agent))
        {
            $bname = 'Netscape';
            $ub = "Netscape";
        }

        // Finally get the correct version number.
        $known = array('Version', $ub, 'other');
        $pattern = '#(?<browser>' . join('|', $known) .
        ')[/ ]+(?<version>[0-9.|a-zA-Z.]*)#';
        if (!preg_match_all($pattern, $u_agent, $matches)) {
            // we have no matching number just continue
        }

        // See how many we have.
        $i = count($matches['browser']);
        if ($i != 1) {
            //we will have two since we are not using 'other' argument yet
            //see if version is before or after the name
            if (strripos($u_agent,"Version") < strripos($u_agent,$ub)){
                $version= $matches['version'][0];
            }
            else {
                $version= $matches['version'][1];
            }
        }
        else {
            $version= $matches['version'][0];
        }

        // Check if we have a number.
        if ($version==null || $version=="") {$version="?";}

        return array(
            'userAgent' => $u_agent,
            'name'      => $bname,
            'version'   => $version,
            'platform'  => $platform,
            'pattern'    => $pattern
        );
    }

    // Now try it.
    $ua=getBrowser();
    $yourbrowser= "Your browser: " . $ua['name'] . " " . $ua['version'] . " on " .
                  $ua['platform'] . " reports: <br >" . $ua['userAgent'];
    print_r($yourbrowser);
?>

Belki JavaScript Browser Detection (W3Schools).

Eğer bu basit işlevini kullanabilirsiniz:

<?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;
}
?>

PHP ben $_SERVER['HTTP_USER_AGENT'] değerini kullanın ve regex veya stristr ile saldırı.

Ben PHP için sınıf Browser Detect kullanın.

Bu tarayıcı IE, Chrome veya FF kullanılarak olmadığını bilmek basit bir yol olabilir

if (navigator.userAgent.indexOf("Chrome") != -1)
    BName = "Chrome";
if (navigator.userAgent.indexOf("Firefox") != -1)
    BName = "Firefox";
if (navigator.userAgent.indexOf("MSIE") != -1)
    BName = "IE";

if(BName=='Chrome' || BName=='Firefox' || BName=='IE') 
    BName="Not other";
else BName="other";
alert(BName);

JS bu sınıf yaptım

function CSystemInfo(){
    var self = this;

    self.nScreenWidth = 0;
    self.nScreenHeight = 0;
    self.sPlatform = "Unknown";
    self.sBrowser = "Unknown";

    var init = function(){
        self.nScreenWidth = screen.width;
        self.nScreenHeight = screen.height;
        self.sPlatform = navigator.platform;
        self.sBrowser = getBrowser();
    }

    var getBrowser = function(){
        var userAgent = navigator.userAgent;
        var version = "UNKNOWN VERSION";

        if (userAgent.toLowerCase().indexOf('msie') > -1) {
            var ieversionreg = /(MSIE ([0-9]{1,2}\.[0-9]{1,2}))/;
            if(ieversionreg.test(userAgent)){
                version = ieversionreg.exec(userAgent)[2];
            }
            return 'Internet Explorer '+version;
        }
        else if (userAgent.toLowerCase().indexOf('firefox') > -1){
            var ffversionreg = /(Firefox\/(.+))/;
            if(ffversionreg.test(userAgent)){
                version = ffversionreg.exec(userAgent)[2];
            }
            return 'Firefox '+version;
        }
        else if (userAgent.toLowerCase().indexOf('chrome') > -1){
            var chromereg = /Chrome\/([0-9]{1,2})/;
            if(chromereg.test(userAgent)){
                version = chromereg.exec(userAgent)[1];
            }
            return 'Google Chrome '+version;
        }
        else return 'Unknown';
    }

    init();
}

arayarak örnekleriz

var oInfo = new CSystemInfo();
// Retrieve infos
oInfo.sBrowser; // Google Chrome 21

JavaScript ile bunu yapmak için basit yolu

<script language="Javascript">
    location.href = 'URL_TO_FORWARD_TO';
</script>

Içinde location.href, bunu gibi bir PHP değişkeni kullanabilirsiniz:

<script language="Javascript">
    location.href = '<?php echo $_SERVER['QUERY_STRING']; ?>';
</script>

Bu PHP komut dosyası için bir sorgu olarak verilen bir URL almak ve bu URL'ye iletmek istiyorum. Script gibi olacağını söyledi:

http://your-server/path-to-script/script.php?URL_TO_FORWARD_TO

İyi şanslar.

Ben o hesaba çekmek için güncellenmiş olsa IE 11 giriş, bu yöntem eski yapmıştır. Bu JavaScript ve özellik algılama kullanmak çok daha iyidir. Tabii ki, bazen sadece tamamen bir tarayıcı öldürmek ve / veya JavaScript devre dışı olabilir kullanım durumda karşılamak zorunda istiyorum.

Ben OP'ın nihai hedefi hakkında bilmiyorum, ama benim durumumda ben gerçekten yapmak istediğim tüm Balmer'in tarayıcıları sıçrama oldu. Ne yerde vardı nedeniyle başka bir çözüm bir regex benzer kaynaklanan bir yanlış pozitif IE 10 kullanıcı için başarısız oldu. (Bu thread regex aynı yanlış pozitif veya neden ben bilmiyorum, ama ben bu sayfada biz vardı bir kırık biri olarak aynı değildir biliyorum).

Ben (per se) bir regex itimat etmedi bir yöntem oluşur. Ben de gelecekte eski tarayıcıları sona erecek komut düzenleme, ancak, yeni tarayıcıları karşılamak için komut dosyasını düzenlemek zorunda bir senaryo çalıştırmak istemiyordu kabul edilebilir.

function obsolete_browser(){
$ua = (isset($_SERVER['HTTP_USER_AGENT']))?$_SERVER['HTTP_USER_AGENT']:'';
$browser = explode(';',$ua);
foreach($browser as &$b){ 
    $b = trim($b); // remove the spaces
    $c = explode('.',$b); // major revision only please
    if($c[0]){ $b = $c[0]; }
}
if(in_array("Trident/7",$browser)){ // IE11
    return false;
} else if(in_array('MSIE 4',$browser) 
|| in_array('MSIE 5',$browser) 
|| in_array('MSIE 6',$browser)  
|| in_array('MSIE 7',$browser) 
//  || in_array('MSIE 8',$browser) // we'll need this soon enough, right?
|| in_array('BOLT/2',$browser) // worst browser ever
){
    return true;
}
return false;
}