用户代理,从字符串中提取操作系统和浏览器

2023-12-05

我想从用户代理字符串中提取完整的操作系统名称和浏览器。我怎样才能做到这一点?


我认为获取完整的操作系统名称和完整的浏览器名称很棘手,因为许多浏览器以不同的方式标识自己。您可能需要一些奇特的正则表达式,但它甚至可能无法 100% 地工作。

这是我用来识别浏览器的简单方法。您也许可以对其进行调整以满足您的需求。

<?php

public static function getUserAgent()
{
    static $agent = null;

    if ( empty($agent) ) {
        $agent = $_SERVER['HTTP_USER_AGENT'];

        if ( stripos($agent, 'Firefox') !== false ) {
            $agent = 'firefox';
        } elseif ( stripos($agent, 'MSIE') !== false ) {
            $agent = 'ie';
        } elseif ( stripos($agent, 'iPad') !== false ) {
            $agent = 'ipad';
        } elseif ( stripos($agent, 'Android') !== false ) {
            $agent = 'android';
        } elseif ( stripos($agent, 'Chrome') !== false ) {
            $agent = 'chrome';
        } elseif ( stripos($agent, 'Safari') !== false ) {
            $agent = 'safari';
        } elseif ( stripos($agent, 'AIR') !== false ) {
            $agent = 'air';
        } elseif ( stripos($agent, 'Fluid') !== false ) {
            $agent = 'fluid';
        }

    }

    return $agent;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

用户代理,从字符串中提取操作系统和浏览器 的相关文章

随机推荐

  • 在 .NET 中,对于 128 位数字,我应该使用什么类型?

    我需要做一些大整数数学运算 是否有任何类或结构可以表示 128 位整数并实现所有常用运算符 顺便说一句 我意识到decimal可以用来表示 96 位 int While BigInteger是大多数应用程序的最佳解决方案 如果您有性能关键的
  • 事件未到达 kurento java 服务器

    我是 Kurento 媒体服务器的新手 我正在尝试将事件从 kurento 媒体服务器发送到我拥有的 java 应用程序 我使用以下步骤创建了一个事件 编辑了interfacejson 文件 events properties name T
  • 约束线性回归/二次规划 python

    我有一个这样的数据集 import numpy as np a np array 1 2 2 3 4 2 b np array 1 5 6 c np array 5 4 6 2 1 9 m np vstack a b c y np arra
  • $(document).ready(function () $ 未定义[重复]

    这个问题在这里已经有答案了 我正在开发 asp net mvc 并使用 Kendo UI 网格控件进行数据检索 将这些功能用于另一个应用程序 但问题不在代码中 所有 JavaScript 和 Kendo grid ui 参考 包括当我运行应
  • “instanceof List”和“o instanceof List”之间的区别

    我认为以下内容没有任何区别 Object o new LinkedList
  • 如果 HTML 文本太大,则添加省略号 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 如果字符串太大 有没有办法在字符串中添加省略号 三个点 例如 From This is a very large sentence To This is a ve 可以使用 PHP
  • 如何使用 Java JDBC 从数据库获取所有触发器名称?

    我想从 Oracle 数据库模式中检索所有触发器名称 我使用 getFunctions 检索所有函数 但找不到另一个触发器 DatabaseMetaData dbmd ResultSet result dbmd getFunctions n
  • 错误:Visual Studio 中未加载 opencv_world310.dll 的符号

    我正在 Visual Studio 2015 中使用 OpenCV 3 1 0 编写程序 大多数操作工作正常 但是 我收到访问冲突错误 我已经调试了该项目 执行faceClassifier load haarcascade frontalf
  • 如何检查数组中每个项目的第一个字母?

    我正在构建一个猪拉丁语翻译器 但我不知道如何识别输入单词的第一个字母 我已将输入转换为数组 其中每个项目都是一个新单词 但是如何选择每个项目的每个第一个字母来确定它是否是辅音 元音 等 a This is a sentence for wo
  • 为什么结构体字段显示为空?

    我正在努力从以下代码中获得正确的输出 package main import encoding json fmt func main var jsonBlob3 byte name Platypus spec Monotremata id
  • android 所有动态生成按钮的点击事件

    我编写代码来生成动态按钮 但我不知道如何动态实现每个按钮的单击事件 我找到了一些答案 但无法使用我的代码 请帮助我 这是我的代码 public class dynamicbuttion extends Activity Override p
  • 如何按需挂起 Java 线程?

    我正在用java开发一个多线程游戏 我有几个工作线程从中央线程管理器获取模块 然后自行执行 现在 如果它暂时没有什么可执行的 我希望能够暂停这样的线程 我尝试从线程管理器调用 wait 方法 但这只会导致它忽略后面的 notificatio
  • 带边框和透明间隙的 CSS 三角形切口

    我需要使用 CSS 绘制以下图案作为页面各部分之间的分隔符 使用skewX 技术来自这个答案 我能够准确地模仿三角形切口 两个伪元素附加到下部部分的顶部 一个向左倾斜 一个向右倾斜 以便上部部分的背景显示出来 但我不知道如何添加边框 如第一
  • SQL 一对多

    我正在尝试为我们拥有的系统构建一个 SQL 模式channels 每个都有一个id 以及一个或多个fixtures 我很难找到实现这种一对多映射的方法 即一channel太多fixtures 我正在使用H2数据库引擎 我不能有桌子 id f
  • Excel 数据验证列表,其中排除已使用的值

    我有 A 列 其中有一些数据 B 列有一个数据验证列表下拉列表 其中包含 A 列中的值 当我从 B 列中的列表中选择值 例如 B1 A B2 B B3 C 时 我希望下拉列表排除该列中已使用的值 因此 在屏幕截图中 B4 中的下拉列表应该只
  • 为什么 iPhone 视频是颠倒的?

    我有一个使用标准相机应用程序捕获的视频文件 并使用它从我的 Iphone 5 复制btsync orig mov ISO Media Apple QuickTime movie 那个播放倒挂在 mplayer 或 vlc 中 当我使用 AW
  • 从 M 文件控制 simulink

    我正在尝试从 M 文件控制 simulink 我想要在 M 文件中做的是给 simulink 模型一些输入 运行 simulink 模型 在 0 6 秒时更改一个输入值 然后使用新输入继续运行 simulink 模型 我已经知道通过使用se
  • Xamarin 表单:如何在设备外部存储中创建文件夹和文件?

    我正在尝试在设备的外部存储上的该文件夹中创建一个文件夹和一个文本文件 与 WhatsApp 的做法相同 另外 我需要向该文件写入一些数据 是否可以以 xamarin 形式执行此操作 或者我们应该使用依赖服务吗 提前致谢 UPDATE Luc
  • 使用 HTMLAgilityPack 进行 XHTML 解析

    我在使用 HTMLAgilityPack 找到的元素内有以下元素的列表
  • 用户代理,从字符串中提取操作系统和浏览器

    我想从用户代理字符串中提取完整的操作系统名称和浏览器 我怎样才能做到这一点 我认为获取完整的操作系统名称和完整的浏览器名称很棘手 因为许多浏览器以不同的方式标识自己 您可能需要一些奇特的正则表达式 但它甚至可能无法 100 地工作 这是我用