как извлечь на мобильное устройство имя из пользовательского агента php? - PullRequest
1 голос
/ 24 марта 2019

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

Ответы [ 2 ]

1 голос
/ 24 марта 2019

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

Вместо этого я бы порекомендовал использовать стороннюю библиотеку, такую ​​как устройство-детектор и использовать что-то из следующего:

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();
1 голос
/ 24 марта 2019

Вот твой код.

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