Mobile browser detection?

17,243

Solution 1

I am using this one:

$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'] );

It's short and does detect most mobile users (or rather smartphones). iPad and Android-Tablets won't be classified as 'mobile' since they have bigger screen sizes.

If you want to catch Tablets as well, you can use this:

$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'] );

Solution 2

I'm using Mobile_Detect class. It's updated almost weekly. The code looks for signs of 'mobile' device in both HTTP headers and User-Agent string.

Demo ← run this from your mobile device

You will probably be using only:

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

The class also attempts to detect tablet devices through:

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

There is no silver bullet in detecting mobile devices, but this is a good start before deciding on using external APIs like WURLF, DeviceAtlas or others.

Solution 3

Floern Thanks for the code!!!

I added the Hp TouchPad Tablet with a:

hpwos

Here it is:

$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'] );

Share:
17,243

Related videos on Youtube

ItalyPaleAle
Author by

ItalyPaleAle

Updated on June 01, 2022

Comments

  • ItalyPaleAle
    ItalyPaleAle almost 2 years

    We are looking for a way to determine if a user is using a mobile browser. We need to do that in PHP, by parsing the user agent string. I know this method has got many caveats, but we really need to do it that way.

    Do you have any suggestion? A good (even if not perfect) updated code?

    I know about WURFL, and I believe it's great, but it's not free to use anymore for non open source projects. By googling a bit, I also found this code: http://mobiforge.com/developing/story/lightweight-device-detection-php (and some variations), but I'm not sure about it. Looks like it's written really bad (look, for example, when they use $mobile_browser = '0' with the quotes around an integer...).

    Can you recommend something?

    Thank you,

    Alessandro

  • ItalyPaleAle
    ItalyPaleAle almost 13 years
    Your second link is the same one I put in my OP... Did you read my question?
  • Emre Yazici
    Emre Yazici almost 13 years
    Sorry, I hadn't realized, I was just trying to help you.
  • ItalyPaleAle
    ItalyPaleAle almost 13 years
    Don't worry. Thanks for replying! I just realized my comment is probably a little rude: sorry for that!
  • ItalyPaleAle
    ItalyPaleAle almost 13 years
    It's free to download and redistribute, but not free to use in commercial projects, unless you release the source code (and obviously we will never do that). A license cost 1,500 USD!
  • ItalyPaleAle
    ItalyPaleAle almost 13 years
    I like this code. Clean and simple! Thank you! What if I wanted to add iPad and all other tablets? I know they've got bigger screens, but I need them to be considered as mobile. For the iPad, I think I need to replace ip(hone|od) with ip(hone|od|ad), but what for android tablets and others? (TouchPad and PlayBook?)
  • fravelgue
    fravelgue almost 13 years
    Ok, sorry i thought free like open source
  • Sydwell
    Sydwell about 12 years
    Thanks this works well. I did find an issue with the Samsung S3350 though, the HTTP_USER_AGENT returns( Mozilla/5.0 (compatible; OpenWeb 5.7.2-10) Opera 8.54) My regex skills are little wanting, so have not tried to add to your expression. Any takers?
  • Funka
    Funka about 12 years
    To clarify for posterity: WURFL (as referenced in the original question) is the one with the commercial license. The link to detectmobilebrowser.com in this particular answer is "free and unencumbered software released into the public domain."
  • ItalyPaleAle
    ItalyPaleAle over 11 years
    The #1 idea is flawed, as you cannot just rely on users being on cellular network. And not all carriers insert the header! The #2 can't work as well, because a desktop web browser may have a reduced window and - mostly important - I asked for a server-side solution :)
  • maxweber
    maxweber over 11 years
    It is correct that not all carriers insert headers Qualcuno. But you can in fact check the ones that do. As to your second claim, you can communicate from client to server. In fact, User-Agent comes from client to server. I was suggesting to you some alternatives since you already have the other good suggestions. In fact, what do you think media-queries do on a desktop browser when the window size was reduced by the user? They exactly do as you think "can't work": they adjust the "responsive design" to the window width - probably not what the user wants. E.g. user comparing windows side-by-sid