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

17

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

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

Я знаю о WURFL, и я считаю, что это здорово, но больше не используется для проектов с открытым исходным кодом. К сожалению, я также нашел этот код: Ссылка (и некоторые варианты), но я Я не уверен в этом. Похоже, что это написано очень плохо (посмотрите, например, когда они используют $ mobile_browser = '0' с кавычками вокруг целого числа ...).

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

Спасибо,

Алессандро     

задан Qualcuno 09.07.2011 в 19:28
источник

7 ответов

31

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

$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'] );
    
ответ дан Floern 10.07.2011 в 23:47
источник
  • Мне нравится этот код. Чисто и просто! Спасибо! Что, если я захочу добавить iPad и все другие планшеты? Я знаю, что у них большие экраны, но мне нужно, чтобы их считали мобильными. Для iPad я думаю, что мне нужно заменить ip (hone | od) на ip (hone | od | ad), но что для Android-планшетов и других? (TouchPad и PlayBook?) –  Qualcuno 11.07.2011 в 12:02
  • в порядке, см. мое редактирование –  Floern 11.07.2011 в 13:17
  • Спасибо, что это хорошо работает. Я обнаружил проблему с Samsung S3350, хотя HTTP_USER_AGENT возвращается (Mozilla / 5.0 (совместимо; OpenWeb 5.7.2-10) Opera 8.54). Мои навыки регулярного выражения мало желательны, поэтому не пытались добавить к вашему выражению. Любые берущие? –  Sydwell 07.02.2012 в 19:11
  • также не работает на iphone 6 –  mindmyweb 30.08.2015 в 08:57
12

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

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

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

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

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

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

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

    
ответ дан Șerban Ghiță 05.06.2012 в 15:59
источник
  • Люблю этот скрипт - обновляется на регулярной основе и отлично работает для нас до сих пор. Я даже нашел редкую таблетку, которую не считали таблеткой, и создатель добавил ее через пару дней. Хорошая вещь. –  Midnightly Coder 02.07.2014 в 15:50
1

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

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

  

hpwos

Вот он:

  

$ isMobile = (bool) preg_match ('# \ b (ip (hone | od | ad) | android | opera   м (об-| в) I | окна   (Телефон | се) | ежевика || hpwos | таблетки '' | s (Л Я | eries60 | amsung) | р (laybook | альм | rofile / MIDP | laystation   переносной) | Nokia | Fennec | HTC [-_] '' | мобильный | up.browser | [1-4] [0-9] {2} х [1-4] [0-9] {2}) \ б # я»,   $ _SERVER ['HTTP_USER_AGENT']);

    
ответ дан Dominicanstan 12.11.2011 в 05:12
источник
0

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

В Mobiforge также есть легкий анализ мобильных устройств .

    
ответ дан Emre Yazici 09.07.2011 в 19:36
источник
  • Ваша вторая ссылка - та же самая, что я положил в свой OP ... Вы прочитали мой вопрос? –  Qualcuno 09.07.2011 в 21:04
  • Извините, я не понял, я просто пытался вам помочь. –  Emre Yazici 10.07.2011 в 07:40
  • Не волнуйся. Спасибо за ответ! Я просто понял, что мой комментарий, вероятно, немного груб, извините за это! –  Qualcuno 11.07.2011 в 11:57
0

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

    
ответ дан fravelgue 10.07.2011 в 23:21
источник
  • Это бесплатно для загрузки и перераспределения, но не для использования в коммерческих проектах, если вы не освободите исходный код (и, очевидно, мы этого никогда не сделаем). Лицензия стоит 1500 долларов! –  Qualcuno 11.07.2011 в 12:00
  • Хорошо, извините, я думал, что свободен как открытый источник –  fravelgue 11.07.2011 в 13:39
  • Чтобы уточнить для потомства: WURFL (как указано в исходном вопросе) является тем, у кого есть коммерческая лицензия. Ссылка на detectmobilebrowser.com в этом конкретном ответе - это «бесплатное и необремененное программное обеспечение, выпущенное в общественное достояние». –  Funka 26.04.2012 в 00:10
-1

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

  1. Некоторые из основных носителей вставляют свой собственный заголовок: вы можете использовать это, если хотите, до тех пор, пока пользователи проходят через сеть операторов связи.
  2. Вы можете использовать JavaScript для определения размера экрана. Многие компании стремятся внедрить адаптивный дизайн, делая крошечные веб-страницы: таким образом, это, возможно, лучший, более простой подход. Кроме того, HTML5 имеет медиа-запросы для изменения css на основе размера экрана.
ответ дан maxweber 25.10.2012 в 22:15
источник
  • Идея № 1 ошибочна, так как вы не можете просто полагаться на пользователей, находящихся в сотовой сети. И не все несущие вставляют заголовок! # 2 тоже не может работать, потому что рабочий стол для веб-браузера может иметь уменьшенное окно и, в основном, важно, я попросил серверное решение :) –  Qualcuno 26.10.2012 в 02:07
  • Правильно, что не все носители вставляют заголовки Qualcuno. Но вы действительно можете проверить те, которые делают. Что касается вашего второго требования, вы можете общаться с клиента на сервер. Фактически, User-Agent приходит от клиента к серверу. Я предлагал вам несколько альтернатив, так как у вас уже есть другие хорошие предложения. На самом деле, как вы думаете, медиа-запросы выполняются на обозревателе настольных компьютеров, когда пользовательский размер окна был уменьшен? Они точно так же, как вы думаете, «не могут работать»: они настраивают «отзывчивый дизайн» на ширину окна - возможно, не то, что хочет пользователь. Например. пользователь сравнивает окна по бокам –  maxweber 15.11.2012 в 20:29
-2

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

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

Это то, что я делаю

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

    $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: Ссылка Веб-сайт: Ссылка

Тип браузера: 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 (Индия)

// GEO CITY

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

Это просто и чисто и дает вам нужную

    
ответ дан Larry Kosis 28.04.2012 в 10:38
источник