【问题标题】:how to extract on mobile device name from php user agent?如何从 php 用户代理中提取移动设备名称?
【发布时间】:2019-03-25 01:24:52
【问题描述】:

我正在编写保存用户设备详细信息的代码。但是当我使用 PHP 用户代理时,它会返回整个信息字符串。如何仅提取设备名称,例如 iPhone 6、Samsung Galaxy a5 等型号名称?

我尝试了一些正则表达式,但那会是很长的代码,我无法涵盖每一个设备。

我来了

Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1

我只想要iPhone OS 10_3_1

【问题讨论】:

  • 请编辑您的帖子,向我们展示您用来获取用户代理字符串的相关 PHP 位,并显示您尝试过但不够好的 RegExp,因为您手动指定了模型。也请不要每个单词都以大写字母开头,这样的文字很难理解。这一次,我为你编辑了这些

标签: php user-agent


【解决方案1】:

用户代理的编写方式有很多种,仅通过正则表达式或简单逻辑很难提取信息。更好的方法是搜索您知道可能出现的给定设备的列表,例如来自this answer,但这可能会使提取版本信息变得困难。

我建议使用第三方库,例如 device-detector 并使用以下内容:

use DeviceDetector\DeviceDetector;

// Fetch the user agent
$userAgent = $_SERVER['HTTP_USER_AGENT'];

// Create an instance of DeviceDetector
$dd = new DeviceDetector($userAgent);

// Extract any information you want
$osInfo = $dd->getOs();
$device = $dd->getDeviceName();
$brand = $dd->getBrandName();
$model = $dd->getModel();

【讨论】:

    【解决方案2】:

    这里是你的代码。

    $str = "Mozilla/5.0 (iPhone; CPU iPhone OS 10_3_1 like Mac OS X) AppleWebKit/603.1.30 (KHTML, like Gecko) Version/10.0 Mobile/14E304 Safari/602.1";
    
    $pos1 = strpos($str, '(')+1;
    $pos2 = strpos($str, ')')-$pos1;
    $part = substr($str, $pos1, $pos2);
    $parts = explode(" ", $part);
    echo $parts[2].' '.$parts[3].' '.$parts[4];
    

    【讨论】:

    • 有很多可能的用户代理字符串。对于这种情况,您的代码将不起作用
    猜你喜欢
    • 2013-02-19
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2017-11-14
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 2012-02-04
    相关资源
    最近更新 更多