PHP移动浏览器检测?

13

我需要一种服务器端检测移动浏览器的方法。我希望这种方法需要很少的设置和维护工作,但仍然可以精确检测(至少)Android、Mobile Safari和Blackberry浏览器以及类似Opera的替代浏览器。

我希望至少覆盖大部分的移动市场,如果不需要太多工作,我也希望几乎覆盖全部市场。


2
“little to maintain”要实现可能会比较困难,因为我们唯一相对可靠的方法就是用户代理字符串,而这些在新版本中经常发生变化。不过,我确实想知道你所预期的“冲突”是什么? - Wrikken
我想这是可以理解的。但是,哈哈,这是尝试从htc dream发布的结果。应该只是“检测”。 - Trey Keown
非常类似于https://dev59.com/vGw15IYBdhLWcg3wZq5r,它的被接受的答案可能适用于您,它基于下面@Rick的建议,尽管可能需要一些维护。 - Sydwell
10个回答

16

WURLF是移动浏览器检测的终极方式,提供PHP API


+1,让我补充一下,它会经常更新以适应新的设备和设备功能。 - Fanis Hatzidakis
1
我只想在这里指出(对于任何在我之后通过谷歌搜索的人),WURLF需要PEAR Log库。 - electblake
不幸的是,PHP库似乎没有像Java库那样经常更新。我刚刚下载了它,但它错误地将Android上的Chrome识别为桌面版。我会寻找另一个库。 - Moshe Shaham
1
WURFL不再免费供商业使用。他们每年收取天价费用以使用其服务。 - Ryan

15

它经常更新,易于使用,并且还得到了BrowserStack的赞助 - 看起来是一个不错的库。 - tonyhb
@tonyhb...当你说它经常更新时,我不明白它如何更新,因为我已经将Mobile_Detect.php文件下载到了我的电脑上。你是指我需要定期返回下载网站以检查更新版本吗? - dsdsdsdsd
是的,您需要定期重新下载文件以确保您的文件是最新的。 - tonyhb

7
(编辑:目前浏览器能力项目已关闭,即此答案目前不可行)
你所需要的只是使用get_browser()函数和最新的browscap.ini文件,该文件将用户代理字符串映射到浏览器/版本及其功能。
你可以从http://browsers.garykeith.com/downloads.asp获取通常非常更新的browscap.ini版本。

3

只需要阅读请求头(如何在PHP中读取任何请求头)并解析/解释它以读取“用户代理”,您可以找到现有的PHP脚本或纯正则表达式来确定哪些用户代理是移动设备,哪些是普通台式机/笔记本电脑。

有很多不同的头部,因为它指示操作系统,所以只要有多种不同的移动操作系统,就会有用户代理头部,因此脚本需要具有所有有效用户代理的列表。


嘿,谢谢回复,但我真的更希望能找到一个库来避免这种繁琐的工作... - Trey Keown
2
你可以检查变量 $_SERVER['HTTP_USER_AGENT'] - webbiedave

3

最近发现了这个库:

http://code.google.com/p/mobileesp/

它有 PHP、Java、JavaScript 和 C# 版本。我认为它是一个“轻量级”的智能手机/平板检测工具,没有依赖项并且经常更新。不过,对于代码质量的某些方面,我有些犹豫。

如果你需要更轻量级的东西,在 WordPress 的 WP Super Cache 插件中包含一些长正则表达式字符串,你可能可以使用。

基于用户代理字符串的浏览器嗅探总是会有缺陷。我看了一下 WURFL,它压缩后有几 MB 大小。使用它就有点大材小用了。更好的方法是检测网站上使用最多的设备,为这些设备设计,然后就可以打住了。


2

最近,Zend Framework 推出了 Zend_Http_UserAgent

它可以通过检测 UserAgent 来确定移动设备及其功能,并使用 Wurfl、TeraWurfl 和 DeviceAtlas API 进行检测。



1

1

0

我曾经用来暂时存储访客的IP地址和CSRF会话值(意味着计算当前访问者)。

我发现我还可以通过观察CSRF来看访问者是使用移动设备还是个人电脑:移动端的CSRF在每次新页面加载时都会更改,而PC则不会;而IP地址则在两种情况下都保留。

当然,你只能检测到一个移动设备如果一个访客点击了两次,我也没有检查它的可靠性(因为我并不需要),但这只是在PHP/服务器端进行的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接