как извлечь имя мобильного устройства из пользовательского агента php?

Я пишу код, который сохраняет информацию об устройстве пользователя. Но когда я использую пользовательский агент 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


person Kailash Loncha    schedule 24.03.2019    source источник
comment
пожалуйста, отредактируйте свой пост, чтобы показать нам соответствующий бит PHP, который вы используете для получения строки пользовательского агента, а также показать RegExp, который вы пробовали, но который недостаточно хорош, потому что вы указываете модель вручную. Пожалуйста, не начинайте каждое слово с заглавной буквы, такой текст трудно понять. На этот раз я отредактировал их для вас   -  person YakovL    schedule 24.03.2019


Ответы (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];
person Prabu samvel    schedule 24.03.2019
comment
существует так много возможных строк пользовательского агента. в этом случае ваш код не будет работать - person Always Sunny; 24.03.2019

Существует так много разных способов написания пользовательского агента, что трудно извлечь информацию с помощью простого регулярного выражения или простой логики. Лучшим способом будет поиск списка заданных устройств, которые, как вы знаете, могут встречаться, например, из этого ответа, однако это может затруднить извлечение информации о версии.

Вместо этого я бы рекомендовал использовать стороннюю библиотеку, такую ​​как 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();
person Johan    schedule 24.03.2019