移动浏览器检测?

Posted

技术标签:

【中文标题】移动浏览器检测?【英文标题】:Mobile browser detection? 【发布时间】:2011-10-01 22:52:48 【问题描述】:

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

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

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

你能推荐一些东西吗?

谢谢,

亚历山德罗

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

您的第二个链接与我在 OP 中的链接相同...您阅读我的问题了吗? 对不起,我没有意识到,我只是想帮助你。 别担心。感谢回复!我刚刚意识到我的评论可能有点粗鲁:对不​​起!【参考方案2】:

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

【讨论】:

它可以免费下载和重新分发,但不能免费用于商业项目,除非您发布源代码(显然我们永远不会这样做)。许可证费用为 1,500 美元! 好的,对不起,我认为像开源一样免费 为后代澄清:WURFL(如原始问题中所引用)是具有商业许可的。在这个特定答案中,detectmobilebrowser.com 的链接是“发布到公共领域的免费且不受阻碍的软件”。【参考方案3】:

我正在使用这个:

$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]2x[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]2x[1-4][0-9]2)\b#i', $_SERVER['HTTP_USER_AGENT'] );

【讨论】:

我喜欢这段代码。干净简单!谢谢!如果我想添加 iPad 和所有其他平板电脑怎么办?我知道他们有更大的屏幕,但我需要将它们视为移动设备。对于 iPad,我认为我需要将 ip(hone|od) 替换为 ip(hone|od|ad),但对于 android 平板电脑和其他平板电脑怎么办? (触摸板和 PlayBook?) 谢谢这很好用。我确实发现了三星 S3350 的问题,但 HTTP_USER_AGENT 返回(Mozilla/5.0(兼容;OpenWeb 5.7.2-10)Opera 8.54)我的正则表达式技能很少,所以没有尝试添加到您的表达式中。有接受者吗?【参考方案4】:

Floern 感谢您的代码!!!

我添加了 Hp TouchPad 平板电脑,其中包含:

hpwos

这里是:

$isMobile = (bool)preg_match('#\b(ip(hone|od|ad)|android|opera m(ob|in)i|窗口 (phone|ce)|blackberry||hpwos|tablet'.'|s(ymbian|eries60|amsung)|p(laybook|alm|rofile/midp|laystation 便携式)|诺基亚|fennec|htc[-_]'.'|mobile|up.browser|[1-4][0-9]2x[1-4][0-9]2) \双', $_SERVER['HTTP_USER_AGENT']);

【讨论】:

【参考方案5】:

对不起,我之前看错了你的问题

有一种非常简单的方法可以检测某人是在使用手机还是 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'];
?]]"]]

请注意,我更改了

结果打印在我的电子邮件上是这样的::

Referrers: 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, like Gecko) Version/5.0 Safari/533.16

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

// 地理城市

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

这简单干净,可以满足您的需求

【讨论】:

【参考方案6】:

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

Demo ← 在您的移动设备上运行此程序

您可能只会使用:

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

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

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

检测移动设备没有灵丹妙药,但在决定使用 WURLF、DeviceAtlas 等外部 API 之前,这是一个好的开始。

【讨论】:

喜欢这个脚本 - 定期更新,到目前为止对我们来说效果很好。我什至发现了一个不被算作平板电脑的稀有平板电脑,而创作者在几天内就将其添加了。好东西。【参考方案7】:

另外两个想法是:

    一些主要的运营商插入他们自己的标头:只要用户通过运营商网络,您可以使用它,如果您关心的话。 您可以使用 javascript 来检测屏幕大小。许多公司正在尝试通过制作小型网页来实现响应式设计:因此,这可能是一种更好、更简单的方法。此外,HTML5 具有媒体查询,可根据屏幕大小更改 css。

【讨论】:

#1 的想法是有缺陷的,因为您不能仅仅依赖于使用蜂窝网络的用户。并非所有运营商都插入标题! #2 也不能正常工作,因为桌面 Web 浏览器的窗口可能会缩小,而且 - 最重要的是 - 我要求提供服务器端解决方案 :) 并非所有运营商都插入标头 Qualcuno 是正确的。但你实际上可以检查那些做的。至于您的第二个声明,您可以从客户端到服务器进行通信。实际上,User-Agent 是从客户端到服务器的。我向您建议了一些替代方案,因为您已经有了其他好的建议。事实上,当用户减小窗口大小时,您认为媒体查询在桌面浏览器上会做什么?他们完全按照您认为“无法工作”的方式进行操作:他们将“响应式设计”调整为窗口宽度 - 可能不是用户想要的。例如。用户并排比较窗口

以上是关于移动浏览器检测?的主要内容,如果未能解决你的问题,请参考以下文章

禁用 Facebook 移动浏览器检测?

移动浏览器检测 [重复]

如何使用 jQuery 或其他一些简单的方式检测移动浏览器..? [复制]

使用“桌面模式”浏览器仅检测移动用户

移动浏览器检测?

检测移动浏览器捏缩放