【发布时间】:2012-03-30 10:00:35
【问题描述】:
我想从用户代理字符串中提取完整的操作系统名称和浏览器。我该怎么做?
【问题讨论】:
-
我建议查看github.com/dmolsen/ua-parser-php 之类的东西来实现这一目标
标签: php browser operating-system user-agent
我想从用户代理字符串中提取完整的操作系统名称和浏览器。我该怎么做?
【问题讨论】:
标签: php browser operating-system user-agent
PHP 中还有一个内置函数可以实现这一点以及更多功能:get_browser()。
$agent = get_browser();
echo $agent->platform;
echo $agent->parent; // or $agent->browser . $agent->version
【讨论】:
@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;
}
?>
【讨论】:
我认为获取完整的操作系统名称和完整的浏览器名称很棘手,因为许多浏览器以不同的方式标识自己。您可能需要一些花哨的正则表达式,然后它甚至可能无法 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;
}
【讨论】: