How to test if a browser is mobile (phone, iPad, etc.) with PHP
This function tests whether a visitor's browser is mobile and, if so, returns a value of true. It is useful for making customizations to websites for mobile users that go beyond simple CSS.
This code should pick up nearly all mobile browsers and gaming platforms. I included gaming platforms to accommodate the poor resolution on older TVs. Out of the 13921 user_agent codes in the 21 October 2010 WURFL file, this script will miss 324 (2.3%). I skipped those for a number of reasons, mostly because they were either unique or, on the other hand, such common terms that I thought the script would be overly aggressive and produce false positives.
Some of those I skipped are bots, text-based browsers, and crawlers, so the actual percentage of skipped mobile devices is probably lower. If you use this code and note that a mobile device you have doesn't work, please let me know. Similarly, if you find that it is catching legitimate desktop or laptop-based browsers, please also let me know.
The browser test function:
function is_mobile() {
// Get the user agent
$user_agent = $_SERVER['HTTP_USER_AGENT'];
// Create an array of known mobile user agents
// This list is from the 21 October 2010 WURFL File.
// Most mobile devices send a pretty standard string that can be covered by
// one of these. I believe I have found all the agents (as of the date above)
// that do not and have included them below. If you use this function, you
// should periodically check your list against the WURFL file, available at:
// http://wurfl.sourceforge.net/
$mobile_agents = Array(
"240x320",
"acer",
"acoon",
"acs-",
"abacho",
"ahong",
"airness",
"alcatel",
"amoi",
"android",
"anywhereyougo.com",
"applewebkit/525",
"applewebkit/532",
"asus",
"audio",
"au-mic",
"avantogo",
"becker",
"benq",
"bilbo",
"bird",
"blackberry",
"blazer",
"bleu",
"cdm-",
"compal",
"coolpad",
"danger",
"dbtel",
"dopod",
"elaine",
"eric",
"etouch",
"fly " ,
"fly_",
"fly-",
"go.web",
"goodaccess",
"gradiente",
"grundig",
"haier",
"hedy",
"hitachi",
"htc",
"huawei",
"hutchison",
"inno",
"ipad",
"ipaq",
"ipod",
"jbrowser",
"kddi",
"kgt",
"kwc",
"lenovo",
"lg ",
"lg2",
"lg3",
"lg4",
"lg5",
"lg7",
"lg8",
"lg9",
"lg-",
"lge-",
"lge9",
"longcos",
"maemo",
"mercator",
"meridian",
"micromax",
"midp",
"mini",
"mitsu",
"mmm",
"mmp",
"mobi",
"mot-",
"moto",
"nec-",
"netfront",
"newgen",
"nexian",
"nf-browser",
"nintendo",
"nitro",
"nokia",
"nook",
"novarra",
"obigo",
"palm",
"panasonic",
"pantech",
"philips",
"phone",
"pg-",
"playstation",
"pocket",
"pt-",
"qc-",
"qtek",
"rover",
"sagem",
"sama",
"samu",
"sanyo",
"samsung",
"sch-",
"scooter",
"sec-",
"sendo",
"sgh-",
"sharp",
"siemens",
"sie-",
"softbank",
"sony",
"spice",
"sprint",
"spv",
"symbian",
"tablet",
"talkabout",
"tcl-",
"teleca",
"telit",
"tianyu",
"tim-",
"toshiba",
"tsm",
"up.browser",
"utec",
"utstar",
"verykool",
"virgin",
"vk-",
"voda",
"voxtel",
"vx",
"wap",
"wellco",
"wig browser",
"wii",
"windows ce",
"wireless",
"xda",
"xde",
"zte"
);
// Pre-set $is_mobile to false.
$is_mobile = false;
// Cycle through the list in $mobile_agents to see if any of them
// appear in $user_agent.
foreach ($mobile_agents as $device) {
// Check each element in $mobile_agents to see if it appears in
// $user_agent. If it does, set $is_mobile to true.
if (stristr($user_agent, $device)) {
$is_mobile = true;
// break out of the foreach, we don't need to test
// any more once we get a true value.
break;
}
}
return $is_mobile;
}
Suggested Usage:
if (is_mobile()) {
// Place code you wish to execute if browser is mobile here
}
else {
// Place code you wish to execute if browser is NOT mobile here
}
