我需要一种服务器端检测移动浏览器的方法。我希望这种方法需要很少的设置和维护工作,但仍然可以精确检测(至少)Android、Mobile Safari和Blackberry浏览器以及类似Opera的替代浏览器。
我希望至少覆盖大部分的移动市场,如果不需要太多工作,我也希望几乎覆盖全部市场。
我需要一种服务器端检测移动浏览器的方法。我希望这种方法需要很少的设置和维护工作,但仍然可以精确检测(至少)Android、Mobile Safari和Blackberry浏览器以及类似Opera的替代浏览器。
我希望至少覆盖大部分的移动市场,如果不需要太多工作,我也希望几乎覆盖全部市场。
WURLF是移动浏览器检测的终极方式,提供PHP API。
我发现使用php-mobile-detect非常简单易用。
只需要阅读请求头(如何在PHP中读取任何请求头)并解析/解释它以读取“用户代理”,您可以找到现有的PHP脚本或纯正则表达式来确定哪些用户代理是移动设备,哪些是普通台式机/笔记本电脑。
有很多不同的头部,因为它指示操作系统,所以只要有多种不同的移动操作系统,就会有用户代理头部,因此脚本需要具有所有有效用户代理的列表。
$_SERVER['HTTP_USER_AGENT']
。 - webbiedave最近发现了这个库:
http://code.google.com/p/mobileesp/
它有 PHP、Java、JavaScript 和 C# 版本。我认为它是一个“轻量级”的智能手机/平板检测工具,没有依赖项并且经常更新。不过,对于代码质量的某些方面,我有些犹豫。
如果你需要更轻量级的东西,在 WordPress 的 WP Super Cache 插件中包含一些长正则表达式字符串,你可能可以使用。
基于用户代理字符串的浏览器嗅探总是会有缺陷。我看了一下 WURFL,它压缩后有几 MB 大小。使用它就有点大材小用了。更好的方法是检测网站上使用最多的设备,为这些设备设计,然后就可以打住了。
最近,Zend Framework 推出了 Zend_Http_UserAgent。
它可以通过检测 UserAgent 来确定移动设备及其功能,并使用 Wurfl、TeraWurfl 和 DeviceAtlas API 进行检测。
我曾经用来暂时存储访客的IP地址和CSRF会话值(意味着计算当前访问者)。
我发现我还可以通过观察CSRF来看访问者是使用移动设备还是个人电脑:移动端的CSRF在每次新页面加载时都会更改,而PC则不会;而IP地址则在两种情况下都保留。
当然,你只能检测到一个移动设备如果一个访客点击了两次,我也没有检查它的可靠性(因为我并不需要),但这只是在PHP/服务器端进行的操作。