我想从用户代理字符串中提取完整的操作系统名称和浏览器。我怎么能这样做?
答案 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