如何从php用户代理中提取移动设备名称?

时间:2019-03-24 14:06:21

标签: php user-agent

我正在编写保存用户设备详细信息的代码。但是,当我使用PHP用户代理时,它将返回整个信息字符串。如何仅提取设备名称,例如iPhone 6,三星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

2 个答案:

答案 0 :(得分:1)

这里是您的代码。

$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];

答案 1 :(得分:1)

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

相反,我建议使用第三方库,例如device-detector,并在以下内容中使用某些内容:

fetch(url, {
    method: 'POST',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'multipart/form-data'
    },
    body: formData
})