问题
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
回答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'] );
回答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.
回答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'] );
回答4:
You can use PHP's built-in function get_browser(). According to the PHP Manual the output array has platform
field which you may use to detect mobile browsers.
There is also a lightweight mobile device detection code by Mobiforge.
回答5:
If you don't need advanced capabilities detection, you could use this resource. I think new WURFL apis are AGPL, so they are free. Anyway you could use old version, is't?
回答6:
Two other ideas are:
- Some of the major carriers insert their own header: you can use this if you care, as long as users are through the carrier network.
- You can use JavaScript to detect the screen size. Lots of companies are tring to implement Responsive Design by doing tiny web pages: so, this is maybe a better, simpler approach. Also, HTML5 has media-queries to change css based on screen size.
回答7:
Sorry I mis-read your question before
There is a very easy way to detect if someone is using a mobile or PC
This is what I do
IN my form display results I add the following at the VERY end of the form data capture;
$msg .= "Referers: ".$_POST['Referers']. "\r\n";
Then Just Under the field I add this
[[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'];
?]]"]]
Note that I changed the
The results PRINT out like this on my emails::
Referrers: IP: xxx.xxx.xxx.xxx // I am hiding this
URL: http://www.emailmarketingaustralia.com.au/Contact/index.php Website: http://www.emailmarketingaustralia.com.au
Browser Type:Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10_6_3; HTC_Sensation_Z710e; en-in) AppleWebKit/533.16 (KHTML, like Gecko) Version/5.0 Safari/533.16
What is interesting is that I am in AUstralia, yet the GEO-REGION lists me as en-in (India)
// GEO CITY
You can also get data from MAX MIND (www.maxmind.com) if you want the IP to display the city and country
This is simple and clean and gives you want you need
来源:https://stackoverflow.com/questions/6636306/mobile-browser-detection