用户代理,从字符串中提取OS和浏览器

时间:2012-03-13 23:06:49

标签: php browser operating-system user-agent

我想从用户代理字符串中提取完整的操作系统名称和浏览器。我怎么能这样做?

3 个答案:

答案 0 :(得分:6)

我认为获得完整的操作系统名称和完整的浏览器名称很棘手,因为许多浏览器都会以不同的方式识别自己。您可能需要一些花哨的正则表达式,然后它可能甚至不会100%的时间工作。

这是我用来识别浏览器的简单方法。您可以根据自己的需要进行调整。

<?php

public static function getUserAgent()
{
    static $agent = null;

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

        if ( stripos($agent, 'Firefox') !== false ) {
            $agent = 'firefox';
        } elseif ( stripos($agent, 'MSIE') !== false ) {
            $agent = 'ie';
        } elseif ( stripos($agent, 'iPad') !== false ) {
            $agent = 'ipad';
        } elseif ( stripos($agent, 'Android') !== false ) {
            $agent = 'android';
        } elseif ( stripos($agent, 'Chrome') !== false ) {
            $agent = 'chrome';
        } elseif ( stripos($agent, 'Safari') !== false ) {
            $agent = 'safari';
        } elseif ( stripos($agent, 'AIR') !== false ) {
            $agent = 'air';
        } elseif ( stripos($agent, 'Fluid') !== false ) {
            $agent = 'fluid';
        }

    }

    return $agent;
}

答案 1 :(得分:2)

@augustknight:注意,IE11没有发送“MSIE”令牌,我建议将匹配添加到Trident令牌。

IE 11用户代理示例:

Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko

更改代码:

<?php
public static function getUserAgent()
{
    static $agent = null;

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

        if ( stripos($agent, 'Firefox') !== false ) {
            $agent = 'firefox';
        } elseif ( stripos($agent, 'MSIE') !== false ) {
            $agent = 'ie';
        } elseif ( stripos($agent, 'Trident') !== false ) {
            $agent = 'ie';
        } elseif ( stripos($agent, 'iPad') !== false ) {
            $agent = 'ipad';
        } elseif ( stripos($agent, 'Android') !== false ) {
            $agent = 'android';
        } elseif ( stripos($agent, 'Chrome') !== false ) {
            $agent = 'chrome';
        } elseif ( stripos($agent, 'Safari') !== false ) {
            $agent = 'safari';
        } elseif ( stripos($agent, 'AIR') !== false ) {
            $agent = 'air';
        } elseif ( stripos($agent, 'Fluid') !== false ) {
            $agent = 'fluid';
        }

    }

    return $agent;
}

&GT;

答案 2 :(得分:1)

在PHP中还有一个内置函数来实现这一目标以及更多:get_browser()

$agent = get_browser();
echo $agent->platform;
echo $agent->parent; // or $agent->browser . $agent->version