php来检测浏览器

php来检测浏览器,php,cross-browser,browser-detection,php-5.2,Php,Cross Browser,Browser Detection,Php 5.2,我有一个奇怪的css错误,我似乎无法修复,它只发生在safari中,而不是chrome中,所以webkit定位没有帮助。。我试图做的是设置一个php块来检查浏览器safari是否响应css的提示 到目前为止,我得到了这个(贝娄)-这是可行的,但它也输出了铬的回声声明,有没有任何想法是我错了 <?php if(isset($_SERVER['HTTP_USER_AGENT'])){ $agent = $_SERVER['HTTP_USER_AGENT'];

我有一个奇怪的css错误,我似乎无法修复,它只发生在safari中,而不是chrome中,所以webkit定位没有帮助。。我试图做的是设置一个php块来检查浏览器safari是否响应css的提示

到目前为止,我得到了这个(贝娄)-这是可行的,但它也输出了铬的回声声明,有没有任何想法是我错了

<?php 

    if(isset($_SERVER['HTTP_USER_AGENT'])){
         $agent = $_SERVER['HTTP_USER_AGENT'];
    }

    if(strlen(strstr($agent,"Safari")) > 0 ){
        $browser = 'safari';
    }
    if($browser=='safari'){
        echo '<style>p {font-weight: 300;}</style>';
    }

?>

我刚刚在玩echo$\u服务器[“HTTP\u USER\u AGENT”]这是我从safari得到的

Mozilla/5.0(Macintosh;英特尔Mac OS X 10_8_2)AppleWebKit/536.26.17 (KHTML,比如Gecko)版本/6.0.2safari/536.26.17

和铬

Mozilla/5.0(Macintosh;英特尔Mac OS X 10_8_2)AppleWebKit/537.22 (KHTML,像壁虎)铬/25.0.1364.172狩猎/537.22


因此,它可以区分不同的浏览器,但显然,它将它们都解读为苹果网络工具包,而不是safari或chrome。我的php有点生疏了,我如何让它专门针对safari用户代理

还可以尝试特定版本的Safari吗?我目前不在Mac电脑上,因此无法为您测试此功能,但请告诉我它是否有帮助:

$ua = $_SERVER["HTTP_USER_AGENT"];

$safari = strpos($ua, 'Safari') ? true : false; // All Safari
$safari_2 = strpos($ua, 'Safari/419') ? true : false; // Safari 2
$safari_3 = strpos($ua, 'Safari/525') ? true : false; // Safari 3
$safari_3_1 = strpos($ua, 'Safari/528') ? true : false; // Safari 3.1
$safari_4 = strpos($ua, 'Safari/531') ? true : false; // Safari 4

// Test Versions
if ($safari_2) { // Safari 2
    echo 'Safari Version 2';
}
elseif ($safari_3) { // Safari 3
    echo 'Safari Version 3';
}
elseif ($safari_4) { // Safari 4
    echo 'Safari Version 4';
}

根据po228的答案,这里有一个更一般的解决方案。我认为直接搜索浏览器的版本号比搜索内部版本号更容易

$ua = $_SERVER["HTTP_USER_AGENT"];      // Get user-agent of browser

$safariorchrome = strpos($ua, 'Safari') ? true : false;     // Browser is either Safari or Chrome (since Chrome User-Agent includes the word 'Safari')
$chrome = strpos($ua, 'Chrome') ? true : false;             // Browser is Chrome

if($safariorchrome == true AND $chrome == false){ $safari = true; }     // Browser should be Safari, because there is no 'Chrome' in the User-Agent

// Check for version numbers 
$v1 = strpos($ua, 'Version/1.') ? true : false;
$v2 = strpos($ua, 'Version/2.') ? true : false;
$v3 = strpos($ua, 'Version/3.') ? true : false;
$v4 = strpos($ua, 'Version/4.') ? true : false;
$v5 = strpos($ua, 'Version/5.') ? true : false;
$v6 = strpos($ua, 'Version/6.') ? true : false;

// Test versions of Safari
if($safari AND $v1){ echo 'Safari Version 1'; }
else if($safari AND $v2){ echo 'Safari Version 2'; }
else if($safari AND $v3){ echo 'Safari Version 3'; }
else if($safari AND $v4){ echo 'Safari Version 4'; }
else if($safari AND $v5){ echo 'Safari Version 5'; }
else if($safari AND $v6){ echo 'Safari Version 6'; }
else if($safari){ echo 'Safari newer than Version 6'; }
else{ echo "Not Safari"; }

我用这个。这并不完美,但它确实有效

$browser = $_SERVER['HTTP_USER_AGENT'];
$chrome = '/Chrome/';
$firefox = '/Firefox/';
$ie = '/MSIE/';
if (preg_match($chrome, $browser))
    echo "Chrome/Opera";
if (preg_match($firefox, $browser))
    echo "Firefox";
if (preg_match($ie, $browser))
    echo "Ie";

此请求有许多开源项目,我建议将该类添加到您的PHP项目中,并在需要时运行它:

但是,如果您只是想解决代码中的问题,我认为这可以做到:

$agent = '';
$browser = '';
if(isset($_SERVER['HTTP_USER_AGENT'])){
     $agent = $_SERVER['HTTP_USER_AGENT'];
}

if(strlen(strstr($agent,'Safari')) > 0 ){
    $browser = 'safari';
   if(strstr($agent,'Chrome')){
     $browser= 'chrome';
   }
}

if($browser=='safari'){
    echo '<style>p {font-weight: 300;}</style>';
}
$agent='';
$browser='';
如果(isset($\u服务器['HTTP\u用户\u代理])){
$agent=$\u服务器['HTTP\u用户\u代理'];
}
如果(strlen(strstrstr($agent,'Safari'))>0){
$browser='safari';
if(strstr($agent,'Chrome')){
$browser='chrome';
}
}
如果($browser=='safari'){
回显'p{字体大小:300;}';
}

我使用以下代码解决了问题

$u_agent = $_SERVER['HTTP_USER_AGENT'];
$issafari=false;
if (preg_match('/Safari/i',$u_agent)){
    $issafari=(!preg_match('/Chrome/i',$u_agent));
}
它很好用

function getBrowser($agent = null){
        $u_agent = ($agent!=null)? $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
        );
    } 
函数getBrowser($agent=null){ $u_-agent=($agent!=null)?$agent:$_-SERVER['HTTP_-USER_-agent']; $bname=‘未知’; $platform='Unknown'; $version=“”; //先到站台? if(preg_匹配('/linux/i',$u代理)){ $platform='linux'; } elseif(preg_match('/macintosh | MacOSX/i',$u代理)){ $platform='mac'; } elseif(预匹配('/windows | win32/i',$u代理)){ $platform='windows'; } //接下来,分别获得useragent的名称yes,并且有充分的理由 if(preg_match('/MSIE/i',$u agent)&!preg_match('/Opera/i',$u agent)) { $bname='Internet Explorer'; $ub=“MSIE”; } elseif(preg_match('/Firefox/i',$u代理)) { $bname='Mozilla Firefox'; $ub=“Firefox”; } elseif(预匹配('/Chrome/i',$u代理)) { $bname=‘谷歌浏览器’; $ub=“Chrome”; } elseif(预匹配('/Safari/i',$u代理)) { $bname='Apple Safari'; $ub=“Safari”; } elseif(预匹配('/Opera/i',$u代理)) { $bname='Opera'; $ub=“歌剧”; } elseif(预匹配('/Netscape/i',$u代理)) { $bname='Netscape'; $ub=“Netscape”; } //最后得到正确的版本号 $known=array('Version',$ub,'other'); $pattern='#(?')。连接('|',$known)。 “)[/]+(?[0-9.| a-zA-Z.]*)#”; 如果(!preg_match_all($pattern,$u_agent,$matches)){ //我们没有匹配的号码,请继续 } //看看我们有多少 $i=计数($matches['browser']); 如果($i!=1){ //我们将有两个,因为我们还没有使用“其他”参数 //查看版本是在名称之前还是之后 if(stripos($u_代理,“版本”)$u\u代理, 'name'=>$bname, “版本”=>$version, “平台”=>$platform, “模式”=>$pattern ); }
我对Safari也有类似的问题(a
float:right;
拒绝坐在另一列旁边),最终使用JavaScript来检测问题,而不是问题浏览器

JavaScript代码:

函数check(){//由HTML的
topPos=document.getElementById(“rightCol”).offsetTop;
//rightCol是否已置于leftCol的下方??
如果(topPos>200){
//如果你想要一条信息,像这样的东西就行了
text=“向Safari(和其他?)用户道歉:重要链接位于页面底部。”+topPos.toString();
document.getElementById(“警告”).appendChild(document.createTextNode(text));
//或者,如果你想覆盖你喜欢的样式,就像这样
document.getElementById(“leftCol”).style.width=“100%”;
document.getElementById(“rightCol”).style.width=“100%”;
document.getElementById(“rightCol”).style.borderTop=“细点黑色”;
}else//删除警告段落(如果需要)
document.getElementById(“警告”).normalise();
}
在Html中: 1.将
onLoad=“check();”
添加到body标记

  • 放置

    以查看特殊消息

  • 为需要测试或重新设置样式的元素提供
    id


  • 用这个肯定管用,我已经看过了
    <?php
    $msie = strpos($_SERVER["HTTP_USER_AGENT"], 'MSIE') ? true : false;
    $firefox = strpos($_SERVER["HTTP_USER_AGENT"], 'Firefox') ? true : false;
    $safari = strpos($_SERVER["HTTP_USER_AGENT"], 'Safari') ? true : false;
    $chrome = strpos($_SERVER["HTTP_USER_AGENT"], 'Chrome') ? true : false;
    ?>
    
    
    <?php
    //Firefox
    if ($firefox) {
    echo 'you are using Firefox!';
    echo '<br />';
    }
    
    // Safari or Chrome. Both use the same engine - webkit
    if ($safari || $chrome) {
    echo 'you are using a webkit powered browser';
    echo '<br />';
    }
    
    // IE
    if ($msie) {
    echo '<br>you are using Internet Explorer<br>';
    echo '<br />';
    }
    
    // Not IE and for all other browsers
    if (!$msie) {
    echo '<br>you are not using Internet Explorer<br>';
    echo '<br />';
    }
    
    // Add inline css
    if ($firefox) {
    echo '<style type="text/css">';
    echo '.mydiv {position:relative; width:100px; height:50px;}';
    echo '</style>';
    }
    ?>