在php中检测浏览器、版本和平台的可靠方法
Posted
技术标签:
【中文标题】在php中检测浏览器、版本和平台的可靠方法【英文标题】:Reliable way to detect browser , version and plattfom in php 【发布时间】:2012-11-26 15:22:47 【问题描述】:我一直在寻找一种可靠的方式来拥有(至少是不那么晦涩的方式):
-
浏览器的名称
版本
及其所在的平台 (OS)
可能有更多信息,但以上 3 条信息就足够了。
我想根据这些信息显示一个自定义内容,例如:
如果用户想知道如何清除浏览器上的 cookie。 假设我已经为许多浏览器提供了许多内容。 版本我想自动加载适当的内容
有没有办法不使用 Javascript 来获取这些值?
我有一些用例,其中浏览器未找到或不准确。所以我想有最可靠的解决方案。
这里有 2 个网站可以满足我的需求:
-
www.whatismybrowser.com(联系店主了解如何用php实现)
HawkBrowser真的很详尽的测试,不是免费的
其他部分解决方案的链接:
-
upgrademybrowser.org 使用 2012 年 8 月的旧浏览器帽 (source)
谷歌的www.whatbrowser.org
花了很多天尝试,寻找,但没有成功。我从 *** 社区发现了很多提示:
-
browsercap 和 get_browser()。该项目已停止(目前为 2012 年 8 月 8 日)并且没有检测到一些现代流行的手持设备。
javascript 检测功能方法:Modernirz。对于我想做的事情来说,这不是好方法,太长了,而且必须经常更新。
jQuery.browser 不够好没有足够的可能性。
quirksmode.org javascript,目前在移动设备上不准确,更喜欢 PHP 版本。
其他有用的链接:
-
Stakoverflow Answer 1
*** Answer 2
PHP mobile Detect
PIWIK 分析报告
编辑 1 到目前为止,我已经测试了答案和 cmets。这些解决方案非常令人满意:
PHP mobile detect 最后一个版本真的很好,如果你正在使用它,最好给客户提供示例中的表格,以便他们可以为项目做出贡献。 (感谢@Pekka)WURFL 不太新,但也很好。 (感谢@Ian Roberts)
编辑 2 PHP 移动检测使用 WURFL
更新
确保您收到的标头未被任何其他库修改。
例如一些安全库,如 OWASP PhpSec [ABANDONED] 将标头结构更改为自定义对象和 @987654338 @ 无法再访问它需要的所有信息
对于那些使用 OWASP PhpSec [ABANDONED] 的人,http 库 正在修改全局标头对象结构。 (2013 年 12 月)因此,如果您有问题,只需使用 PHP mobile detect,然后再使用 http 库
添加任何 OWASP PhpSec 类>【问题讨论】:
努力+1,但为什么PHP移动检测不适合你? 你不会得到一个可靠的方法来检测浏览器。您可以检查可以在大多数浏览器中编辑的用户代理,也可以检查浏览器的各种功能。 @Pekka 我刚刚下载了开发版本,因为你指出了这一点,我现在正在测试它。我使用的是旧版本这正是我所需要的。我将添加一个提交表单来鼓励这一点。请把它作为答案,以便我可以选择它。谢谢 @BenjaminPaap 是的,不幸的是,这是真的。我一直在寻找一个解决方案,该解决方案在 browsercap 暂时暂停后得到维护。就像 Pekka 说的那样,PHP 移动检测对我来说足够有效。 【参考方案1】:你考虑过WURFL吗?它的主要目的是对移动设备浏览器进行分类,但它声称也有一种识别桌面浏览器的模式。
【讨论】:
会试一试并与新的PHP移动检测比较【参考方案2】:您从 get_browser() 获得的 PHP 浏览器信息
这样您就可以使用 ajax 调用 PHP 站点,提供有关用户代理的信息
例如
PHP
$info = get_browser(null, true);
echo json_encode($info);
get_browser 提供的数组长这样
Array
(
[browser_name_regex] => ^mozilla/5\.0 (windows; .; windows nt 5\.1; .*rv:.*) gecko/.* firefox/0\.9.*$
[browser_name_pattern] => Mozilla/5.0 (Windows; ?; Windows NT 5.1; *rv:*) Gecko/* Firefox/0.9*
[parent] => Firefox 0.9
[platform] => WinXP
[browser] => Firefox
[version] => 0.9
[majorver] => 0
[minorver] => 9
[cssversion] => 2
[frames] => 1
[iframes] => 1
[tables] => 1
[cookies] => 1
[backgroundsounds] =>
[vbscript] =>
[javascript] => 1
[javaapplets] => 1
[activexcontrols] =>
[cdf] =>
[aol] =>
[beta] => 1
[win16] =>
[crawler] =>
[stripper] =>
[wap] =>
[netclr] =>
)
这当然不是一个可靠的解决方案,因为您可以根据需要更改浏览器字符串。
【讨论】:
值本身来自 PHP,因此您可以在 php/html 模板中使用 PHP 数组/JSON 或将其解析到另一个模板引擎。如果禁用 javascript,则仅 php 的解决方案也有效 使用 ajax 从 PHP 获取浏览器不是一个好的解决方案,删除它并坚持使用get_browser
,如果你有一个在较新版本的 PHP 中嗅探浏览器的好方法当然更新browsecap.ini文件(这几天可能是个问题)。再说一次,这已经在问题中得到了更好的概述?以上是关于在php中检测浏览器、版本和平台的可靠方法的主要内容,如果未能解决你的问题,请参考以下文章
在 IE 中为 SaveAs 对话框进行特征/对象检测的可靠 Javascript 方法