在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中检测浏览器、版本和平台的可靠方法的主要内容,如果未能解决你的问题,请参考以下文章

查找浏览器类型和版本?

用 php 检测浏览器的最佳方法是啥?

从浏览器检测确切的操作系统版本

在 IE 中为 SaveAs 对话框进行特征/对象检测的可靠 Javascript 方法

如何使用 PHP 检测“Google Chrome”作为用户代理?

ie11的版本判断