Обнаружение мобильного браузера?

Мы ищем способ определить, пользуется ли пользователь мобильным браузером. Нам нужно сделать это в PHP, проанализировав строку пользовательского агента. Я знаю, что у этого метода много предостережений, но нам действительно нужно это делать.

Есть ли у вас предложения? Хороший (даже если не идеальный) обновленный код?

Я знаю о WURFL, и я считаю, что это здорово, но больше не нужно использовать для проектов с открытым исходным кодом. По некоторым причинам, я также нашел этот код: http://mobiforge.com/developing/story/lightweight-device-detection-php (и некоторые варианты), но я не уверен в этом. Похоже, что это написано очень плохо (посмотрите, например, когда они используют $ mobile_browser = '0' с кавычками вокруг целого числа …).

Вы можете что-то порекомендовать?

Спасибо,

Alessandro

Я использую это:

$isMobile = (bool)preg_match('#\b(ip(hone|od)|android\b.+\bmobile|opera m(ob|in)i|windows (phone|ce)|blackberry'. '|s(ymbian|eries60|amsung)|p(alm|rofile/midp|laystation portable)|nokia|fennec|htc[\-_]'. '|up\.browser|[1-4][0-9]{2}x[1-4][0-9]{2})\b#i', $_SERVER['HTTP_USER_AGENT'] ); 

Это коротко и обнаруживает большинство мобильных пользователей (или, скорее, смартфонов). iPad и Android-планшеты не будут классифицироваться как «мобильные», поскольку они имеют больший размер экрана.

Если вы хотите поймать планшеты, вы можете использовать это:

 $isMobile = (bool)preg_match('#\b(ip(hone|od|ad)|android|opera m(ob|in)i|windows (phone|ce)|blackberry|tablet'. '|s(ymbian|eries60|amsung)|p(laybook|alm|rofile/midp|laystation portable)|nokia|fennec|htc[\-_]'. '|mobile|up\.browser|[1-4][0-9]{2}x[1-4][0-9]{2})\b#i', $_SERVER['HTTP_USER_AGENT'] ); 

Я использую класс Mobile_Detect . Он обновляется почти еженедельно. Код ищет признаки «мобильного» устройства как в заголовках HTTP, так и в строке User-Agent.

Demo ← запустите это с вашего мобильного устройства

Вероятно, вы будете использовать только:

 include("Mobile_Detect.php"); $detect = new Mobile_Detect(); if ($detect->isMobile()) { // any mobile platform } в include("Mobile_Detect.php"); $detect = new Mobile_Detect(); if ($detect->isMobile()) { // any mobile platform } 

Класс также пытается обнаружить устройства планшета через:

 if($detect->isTablet()){ // any tablet } 

В обнаружении мобильных устройств нет серебряной пули, но это хороший старт, прежде чем принимать решение об использовании внешних API, таких как WURLF, DeviceAtlas или других.

Спасибо за код !!!

Я добавил планшет HP TouchPad с:

hpwos

Вот:

$ isMobile = (bool) preg_match ('# \ b (ip (hone | od | ad) | android | opera m (ob | in) i | windows (phone | ce) | blackberry || hpwos | tablet'. '| s (ymbian | eries60 | amsung) | p (laybook | alm | rofile / midp | laystation portable) | nokia | fennec | htc [-_] '.' | mobile | up.browser | [1-4] [0- 9] {2} x [1-4] [0-9] {2}) \ b # i ', $ _SERVER [' HTTP_USER_AGENT ']);

Вы можете использовать встроенную функцию get_browser() . Согласно руководству PHP, выходной массив имеет поле platform которое вы можете использовать для обнаружения мобильных браузеров.

Существует также легкий код обнаружения мобильных устройств от Mobiforge.

Если вам не требуется обнаружение расширенных возможностей, вы можете использовать этот ресурс . Я думаю, что новый WURFL apis – AGPL, поэтому они бесплатны. В любом случае, вы можете использовать старую версию, не так ли?

Две другие идеи:

  1. Некоторые из основных носителей вставляют свой собственный заголовок: вы можете использовать это, если хотите, до тех пор, пока пользователи проходят через сеть операторов связи.
  2. Вы можете использовать JavaScript для определения размера экрана. Многие компании стремятся внедрить адаптивный дизайн, делая крошечные веб-страницы: таким образом, это, возможно, лучший, более простой подход. Кроме того, HTML5 имеет медиа-запросы для изменения css на основе размера экрана.

Извините, я неправильно прочитал ваш вопрос раньше

Существует очень простой способ определить, использует ли кто-либо мобильный или ПК

Вот что я делаю

В моих результатах отображения формы я добавляю следующее на ОЧЕНЬ конце сбора данных формы;

  $msg .= "Referers: ".$_POST['Referers']. "\r\n"; 

Затем просто под полем я добавляю это

  [[input type="hidden" id="Referers" name="Referers" value="[[?php echo "IP: " . $_SERVER['REMOTE_ADDR']; echo "\nURL: " . $_SERVER['HTTP_REFERER']; echo "\nWebsite: " . $URL; echo "\n\nBrowser Type:" . $_SERVER['HTTP_USER_AGENT']; ?]]"]] 

Обратите внимание, что я изменил

Результаты ПЕЧАТЬ как это на моих письмах ::

Источники: IP: xxx.xxx.xxx.xxx // Я скрываю это

URL: http://www.emailmarketingaustralia.com.au/Contact/index.php Веб-сайт: http://www.emailmarketingaustralia.com.au

Тип браузера: Mozilla / 5.0 (Macintosh; U; Intel Mac OS X 10_6_3; HTC_Sensation_Z710e ; en-in) AppleWebKit / 533.16 (KHTML, например, Gecko) Версия / 5.0 Safari / 533.16

Интересно то, что я нахожусь в AUstralia, но GEO-REGION перечисляет меня как en-in (Индия)

// ГЕО СИТИ

Вы также можете получить данные из MAX MIND (www.maxmind.com), если вы хотите, чтобы IP отображал город и страну

Это просто и чисто, и вы хотите, чтобы вы