Jump to content

Chrome and Safari not playing nice. Safari identified when Chrome used.


Matt Ridge

Recommended Posts

Chrome is the browser I use, I have it set up so that the script detects safari and chrome as separate entities. When I browse to it, it shows:

 

You are using Windows XP with a Chrome Web Browserwith a Safari Web Browser

 

now I know stristr() is a case-insensitive version of strstr(), which will find the first form of a word in a string. The problem is that when I use it, the rest of the script doesn't work... it goes to the part as if nothing is there, and shows the text on the bottom. I can't figure out why. Can someone help me, is there a chrome/safari level of priority or am I just missing something?

 

<?php
//Booleans to set OS and Browser to False.
$os = false;
$browser = false;
//Booleans for Web Browser & OS Functions.
$xp = xp();
$vista = vista();
$win7 = win7();
$ubuntu = ubuntu();
$chrome = chrome();
$safari = safari();
$firefox = firefox();
$ie9 = ie9();
$ie8 = ie8();


//Operating Systems
function xp(){return(preg_match("/Windows NT 5.1/", $_SERVER['HTTP_USER_AGENT']));}
function vista(){return(preg_match("/Windows NT 6.0/", $_SERVER['HTTP_USER_AGENT']));}
function win7(){return(preg_match("/Windows NT 6.1/", $_SERVER['HTTP_USER_AGENT']));}
function ubuntu(){return(preg_match("/Ubuntu/", $_SERVER['HTTP_USER_AGENT']));}


//Web Browsers
function chrome(){return(preg_match("/Chrome/", $_SERVER['HTTP_USER_AGENT']));}
function safari(){return(preg_match("/Safari/", $_SERVER['HTTP_USER_AGENT']));}
function firefox(){return(preg_match("/Firefox/", $_SERVER['HTTP_USER_AGENT']));}
function ie9(){return(preg_match("/MSIE 9.0/", $_SERVER['HTTP_USER_AGENT']));}
function ie8(){return(preg_match("/MSIE 8.0/", $_SERVER['HTTP_USER_AGENT']));}


// If you have one of the valid Operating System.
if($ubuntu){echo 'You are using Ubuntu Operating System ';}
if($xp){echo 'You are using Windows XP ';}
if($vista){echo 'You are using Windows Vista Operating System ';}
if($win7){echo 'You are using Windows 7 Operating System ';}




// If you have one of the valid Web Browser.
if($chrome){echo 'with a Chrome Web Browser';}
if($firefox){echo 'with an Firefox Web Browser';}
if($safari){echo 'with a Safari Web Browser';}
if($ie8){echo 'with an Internet Explorer 8 Web Browser';}
if($ie9){echo 'with an Internet Explorer 9 Web Browser';}


//If OS or Browser not found in list.
if ($ubuntu || $xp || $vista || $win7)
$os = true;


if($firefox || $chrome || $safari || $ie9 || $ie8)
$browser = true;


if(!$browser || !$os){


echo'<strong>';
echo '<br />' . $_SERVER['HTTP_USER_AGENT'] . '<br /><br />Administrator someone in your work force is using an unsupported browser or OS, please email this information to the developer of the NCMR software you are using. It will allow your browser/OS combination  to be used correctly. Sorry for the inconvenience.</strong> <br /><br />Please copy and paste the text above and send it to your web administrator. It will explain everything he/she needs to do.<br />';}


?>

Link to comment
Share on other sites

http://www.php.net/manual/en/function.get-browser.php#101125

ruudrp at live dot nl 28-Nov-2010 11:31

To my surprise I found that none of the get_browser alternatives output the correct name / version combination that I was looking for using Opera or Chrome. They either give the wrong name eg Safari when in fact it should be Chrome and if the ua string includes a version number as with the latest versions of Chrome and Opera the wrong number is reported. So I took bits and pieces from the various examples and combined them and added a check for version.

<?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 seperately 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);
?>

Link to comment
Share on other sites

http://www.php.net/manual/en/function.get-browser.php#101125

ruudrp at live dot nl 28-Nov-2010 11:31

To my surprise I found that none of the get_browser alternatives output the correct name / version combination that I was looking for using Opera or Chrome. They either give the wrong name eg Safari when in fact it should be Chrome and if the ua string includes a version number as with the latest versions of Chrome and Opera the wrong number is reported. So I took bits and pieces from the various examples and combined them and added a check for version.

<?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 seperately 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);
?>

 

Unless you noticed, with the script above you posted, is using a way close to what I am already using, what I am looking for on how to use stristr() in the script in the OP...

 

I don't want another way of doing what I am attempting, I am asking on how to make stristr() function, and not give a false negative...

 

Do you know how to do this?

Link to comment
Share on other sites

Solved it.

 

<?php
//Booleans to set OS and Browser to False.
$os = false;
$browser = false;
//Booleans for Web Browser & OS Functions.
$info = $_SERVER['HTTP_USER_AGENT'];
$xp = 'Windows NT 5.1';
$vista = 'Windows NT 6.0';
$win7 = 'Windows NT 6.1';
$ubuntu = 'Ubuntu';
$ie9 = 'ie9';
$ie8 = 'ie8';
$chrome = '/Chrome/';
$safari = 'Safari';
$firefox = 'Firefox';


//Operating Systems
if (stristr($info, "Windows NT 5.1")) {echo 'You are using a Windows XP Operating System ';}
if (stristr($info, "Windows NT 6.0")) {echo 'You are using a Windows Vista Operating System ';}
if (stristr($info, "Windows NT 6.1")) {echo 'You are using a Windows 7 Operating System ';}
if (stristr($info, "Ubuntu")) {echo 'You are using an Ubuntu Operating System ';}
if (stristr($info, "Mac OS")) {echo 'You are using a Macintosh Operating System ';}


//Web Browsers
if (stristr($info, "Chrome")) {echo 'with a Chrome Web Browser ';}
if (stristr($info, "Safari")) {echo 'with a Safari Web Browser ';}
if (stristr($info, "Firefox")) {echo 'with a Firefox Web Browser ';}



//If OS or Browser not found in list.
if ($ubuntu || $xp || $vista || $win7)
$os = true;

if($firefox || $chrome || $safari || $ie9 || $ie8)
$browser = true;

if(!$browser || !$os){

echo'<strong>';
echo '<br />' . $_SERVER['HTTP_USER_AGENT'] . '<br /><br />Administrator someone in your work force is using an unsupported browser or OS, please email this information to the developer of the NCMR software you are using. It will allow your browser/OS combination  to be used correctly. Sorry for the inconvenience.</strong> <br /><br />Please copy and paste the text above and send it to your web administrator. It will explain everything he/she needs to do.<br />';}

?>

Link to comment
Share on other sites

Actually, there was a bug... here is rev 2.

 

<?php
//Booleans to set OS and Browser to False.
$os = false;
$browser = false;
//Booleans for Web Browser & OS Functions.
$info = $_SERVER['HTTP_USER_AGENT'];
$xp = 'Windows NT 5.1';
$vista = 'Windows NT 6.0';
$win7 = 'Windows NT 6.1';
$ubuntu = 'Ubuntu';
$ie9 = 'ie9';
$ie8 = 'ie8';
$chrome = '/Chrome/';
$safari = '/Safari/';
$firefox = '/Firefox/';


//Operating Systems
if (stristr($info, "Windows NT 5.1")) {echo 'You are using a Windows XP Operating System ';}
if (stristr($info, "Windows NT 6.0")) {echo 'You are using a Windows Vista Operating System ';}
if (stristr($info, "Windows NT 6.1")) {echo 'You are using a Windows 7 Operating System ';}
if (stristr($info, "Ubuntu")) {echo 'You are using an Ubuntu Operating System ';}
if (stristr($info, "Mac OS")) {echo 'You are using a Macintosh Operating System ';}


//Web Browsers
if (stristr($info, "Chrome") !== FALSE) {stristr($info,"Safari");       
	$chrome = 'Chrome';
		echo 'with a Chrome Web Browser ';}
elseif (stristr($info, "Safari")) {echo 'with a Safari Web Browser ';}

if (stristr($info, "Firefox")) {echo 'with a Firefox Web Browser ';}




//If OS or Browser not found in list.
if ($ubuntu || $xp || $vista || $win7)
$os = true;

if($firefox || $chrome || $safari || $ie9 || $ie8)
$browser = true;

if(!$browser || !$os){

echo'<strong>';
echo '<br />' . $_SERVER['HTTP_USER_AGENT'] . '<br /><br />Administrator someone in your work force is using an unsupported browser or OS, please email this information to the developer of the NCMR software you are using. It will allow your browser/OS combination  to be used correctly. Sorry for the inconvenience.</strong> <br /><br />Please copy and paste the text above and send it to your web administrator. It will explain everything he/she needs to do.<br />';}

?>

Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.