Mobile browser detection?
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'] );
Related videos on Youtube
ItalyPaleAle
Updated on June 01, 2022Comments
-
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 almost 13 yearsYour second link is the same one I put in my OP... Did you read my question?
-
Emre Yazici almost 13 yearsSorry, I hadn't realized, I was just trying to help you.
-
ItalyPaleAle almost 13 yearsDon't worry. Thanks for replying! I just realized my comment is probably a little rude: sorry for that!
-
ItalyPaleAle almost 13 yearsIt'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 almost 13 yearsI 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 almost 13 yearsOk, sorry i thought free like open source
-
Sydwell about 12 yearsThanks 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 about 12 yearsTo 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 over 11 yearsThe #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 over 11 yearsIt 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