PHP 检测 Opera

发布于 2024-11-03 20:04:00 字数 409 浏览 3 评论 0原文

如何使用 PHP 检测 Opera?我在 drupal 中使用 lightbox,它们是 opera 中的一个错误,所以如果使用 opera 查看该网站,我想打印一个普通链接而不是 lightbox。

我找到了这个链接,但它只是说“其他浏览器”而不是 Opera: http://drupal.org/node/65903

这会打印正在使用的浏览器,并且似乎工作正常:

<?php echo $_SERVER['HTTP_USER_AGENT']; ?> 

那么如果浏览器是opera,我可以修改代码来打印一些东西吗?如果是这样,这种方法有什么陷阱吗?

谢谢

How can I detect Opera with PHP? Im using lightbox with drupal and their is a bug in opera, so if the site is being viewed with opera I want to print a normal link instead of the lightbox.

I found this link but it just says 'other browser' not opera:
http://drupal.org/node/65903

This prints the browser being used and seems to work fine:

<?php echo $_SERVER['HTTP_USER_AGENT']; ?> 

So can I modify the code to print something if the browser is opera? If so, are their any pit falls to this method?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

乙白 2024-11-10 20:04:00

检查此链接。在评论中,有人发布了以下代码:

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

所以你可以这样说:

$browser = getBrowser();
if($browser['name'] == "Opera")
{
    echo "This is opera!";
}

Check this link. Down in the comments, somebody posted the following code:

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

So you could say something like:

$browser = getBrowser();
if($browser['name'] == "Opera")
{
    echo "This is opera!";
}
静若繁花 2024-11-10 20:04:00

您可以尝试使用 http://chrisschuld.com/ items/browser-php-detecting-a-users-browser-from-php/,它看起来像是一个有用的脚本,但是,如果您输入的 PHP 代码正在回显某些内容,您可以使用它来更改链接已呈现,那么可能就可以了。唯一的问题是您应该使用某种松散的字符串比较,而不是严格的字符串比较,因为 Opera 的用户代理可能会在版本或操作系统之间发生变化。

You could try using http://chrisschuld.com/projects/browser-php-detecting-a-users-browser-from-php/, it looks like an useful script, however, if that PHP code you entered is echoing something you can use to change how the link is rendered, then that might be fine. The only thing is that you should use a some loose string comparison, not a strict one, because Opera's user agents might change between versions or operating systems.

对风讲故事 2024-11-10 20:04:00

是的,您可以修改代码。只需使用 Opera 为您提供的 $_SERVER['HTTP_USER_AGENT'] 即可进行正确的更改。

就陷阱而言,请记住人们可以更改他们的用户代理。某些应用程序也会更改浏览器的用户代理。因此,用户代理嗅探并不是保证兼容性的可靠方法……实际上,您最好在前端检查特定的浏览器功能,而不是在服务器端检查。但如果您在 PHP 中陷入困境,那么您就走对了路。

Yes, you can modify the code. Just use what Opera is giving you for $_SERVER['HTTP_USER_AGENT'] to make the right change.

As far as pitfalls go, remember that people can change their user agent. Some applications will change your browser's user agent as well. So user agent sniffing isn't a surefire way to guarantee compatibility ... in reality, you'd be better checking for specific browser capabilities on the front end rather than checking on the server side. But if you're stuck doing this in PHP, you're on the right track.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文