移动浏览器检测?

时间:2011-07-09 17:28:03

标签: php mobile user-agent browser-detection

我们正在寻找一种方法来确定用户是否使用移动浏览器。 我们需要通过解析用户代理字符串在PHP中执行此操作。我知道这种方法有很多注意事项,但我们确实需要这样做。

你有什么建议吗?一个好的(即使不是完美的)更新代码?

我知道WURFL,我相信它很棒,但是对于非开源项目来说它不再是免费的。 通过谷歌搜索,我也发现了这段代码:http://mobiforge.com/developing/story/lightweight-device-detection-php(以及一些变体),但我不确定。看起来它写得非常糟糕(例如,看看,当他们使用$ mobile_browser ='0'时,引号围绕一个整数......)。

你能推荐什么吗?

谢谢,

的Alessandro

7 个答案:

答案 0 :(得分:31)

我正在使用这个:

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

答案 1 :(得分:12)

我正在使用Mobile_Detect class。 它几乎每周更新一次。该代码在HTTP标头和用户代理字符串中查找“移动”设备的标志。

Demo←从您的移动设备运行

您可能只会使用:

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

该课程还尝试通过以下方式检测平板电脑设备:

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

在检测移动设备方面没有灵丹妙药,但在决定使用外部API(如WURLF,DeviceAtlas等)之前,这是一个良好的开端。

答案 2 :(得分:1)

Floern感谢代码!!!

我添加了 Hp触摸板平板电脑

  

hpwos

这是:

  

$ isMobile =(bool)preg_match('#\ b(ip(hone | od | ad)| android | opera   米(OB |中)I |窗   (电话| CE)|黑莓|| hpwos |片剂 '' | S(ymbian | eries60 | amsung)| P(laybook | ALM |设定档/ MIDP | laystation   便携式)|诺基亚|小狐| HTC [-_] '' |移动| up.browser | [1-4] [0-9] {2} X [1-4] [0-9] {2}) \双',   $ _SERVER ['HTTP_USER_AGENT']);

答案 3 :(得分:0)

您可以使用PHP的内置函数get_browser()。根据PHP手册,输出数组有platform字段,您可以使用它来检测移动浏览器。

Mobiforge还有一个lightweight mobile device detection代码。

答案 4 :(得分:0)

如果您不需要高级功能检测,则可以使用此resource。我认为新的WURFL apis是AGPL,因此它们是免费的。无论如何你可以使用旧版本,不是吗?

答案 5 :(得分:-1)

另外两个想法是:

  1. 一些主要运营商插入自己的标头:只要用户通过运营商网络,您就可以使用此标头。
  2. 您可以使用JavaScript来检测屏幕大小。很多公司都想通过做一些小网页来实现响应式设计:所以,这可能是一种更好,更简单的方法。此外,HTML5具有媒体查询,可根据屏幕大小更改css。

答案 6 :(得分:-2)

对不起我在

之前误读了你的问题

有一种非常简单的方法可以检测是否有人使用手机或PC

这就是我的工作

在我的表单显示结果中,我在表单数据捕获的非常结尾添加了以下内容;

    $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 //我隐藏了这个

网址: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

有趣的是,我在AUstralia,但GEO-REGION将我列为en-in(印度)

// GEO CITY

如果您希望IP显示城市和国家,您也可以从MAX MIND(www.maxmind.com)获取数据

这很简单干净,让您需要