在php中检测浏览器,版本和平台的可靠方法

2022-08-30 20:09:05

我一直在寻找一种可靠的方法(至少是那些不那么晦涩难懂的方法):

  1. 浏览器的名称
  2. 版本
  3. 以及它所在的平台 (OS)
  4. 也许更多的信息,但上面的3个信息就足够了。

我想根据这些信息显示自定义内容,例如:

如果用户想知道如何清除浏览器上的cookie。假设我有许多内容已经可用于许多浏览器。版本,我想自动加载适当的内容

有没有办法不涉及Javascript来获得这些值?

我有一些用例,其中浏览器未找到或不准确。所以我想有最可靠的解决方案。

以下是2个网站,可以完全满足我的需求:

  1. www.whatismybrowser.com(联系老板知道如何用PHP做)
  2. 鹰浏览器真正详尽的测试,不是免费的

其他与部分解决方案的链接:

  1. upgrademybrowser.org 使用 2012 年 8 月的旧版浏览器盖帽(来源)
  2. 谷歌 www.whatbrowser.org

花了很多天时间尝试,酝酿,但没有成功。我从Stackoverflow社区找到了很多提示:

  1. 带有 get_browser() 的浏览器帽。该项目已停止(目前为2012年8月8日),并且没有检测到一些现代流行的手持设备。
  2. Javascript detect feature approach : Modernirz.对于我想做的事情来说,这不是一个好的方法,要长,并且必须经常更新。
  3. jQuery.browser 不够好,可能性不够。
  4. quirksmode.org javascript,现在与移动设备并不准确,并且更喜欢PHP版本。

其他有用的链接 :

  1. Stakoverflow Answer 1
  2. 堆栈溢出答案 2
  3. PHP 移动检测
  4. PIWIK分析报告

编辑 1到目前为止,我已经测试了答案和评论。这些解决方案非常令人满意:

  • PHP移动检测最后一个版本真的很好,如果你正在使用它,那么在示例中给客户端表单会很好,这样他们就可以为项目做出贡献。(感谢@Pekka)
  • WURFL不是最近的,但也非常好。(感谢@Ian罗伯茨)

    编辑 2PHP 移动检测使用 WURFL

更新

确保您收到的标头未被任何其他库修改。

例如,一些安全库,如OWASP PhpSec [ABANDONED]将标头结构更改为自定义对象,PHP移动检测不再有权访问所需的所有信息。

对于那些使用OWASP PhpSec [ABANDONED]的人来说http库正在修改全局标头对象结构。(2013年12月)因此,如果您遇到问题,只需在使用http库包含任何OWASP PhpSec类之前使用PHP移动检测


答案 1

你有没有考虑过WURFL?它的主要目的是对移动设备浏览器进行分类,但它声称也有一种识别桌面浏览器的模式。


答案 2

您从get_browser() 获得的 PHP 浏览器中的信息

所以你可以使用ajax调用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] =>
)

这当然不是一个可靠的解决方案,因为您可以根据需要更改浏览器字符串。