Обнаружение мобильного браузера? - PullRequest
17 голосов
/ 09 июля 2011

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

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

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

Можете ли вы что-нибудь порекомендовать?

Спасибо,

Alessandro

Ответы [ 7 ]

31 голосов
/ 11 июля 2011

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

$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'] );
12 голосов
/ 05 июня 2012

Я использую класс 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 или другие.

1 голос
/ 12 ноября 2011

Флерн Спасибо за код !!!

Я добавил планшет 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']);

0 голосов
/ 26 октября 2012

Двумя другими идеями являются:

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

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

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

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

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

    $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

Что интересно, так это то, что я нахожусь в Австралии, но ГЕОРЕГИОН перечисляет меня как en-in (Индия)

// GEO CITY

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

Это просто и чисто, и вы хотите, чтобы вам нужно

0 голосов
/ 11 июля 2011

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

0 голосов
/ 09 июля 2011

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

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

...