【发布时间】:2015-04-18 05:53:06
【问题描述】:
我正在尝试检测我的用户是否在使用智能手机。我尝试了很多不同的方法,但似乎没有检测到它是否是智能手机。
下面的甚至没有回显$_SERVER['HTTP_USER_AGENT'];
<?php
echo $_SERVER['HTTP_USER_AGENT'];
$iphone = strpos($_SERVER['HTTP_USER_AGENT'],"iPhone");
$android = strpos($_SERVER['HTTP_USER_AGENT'],"Android");
$palmpre = strpos($_SERVER['HTTP_USER_AGENT'],"webOS");
$berry = strpos($_SERVER['HTTP_USER_AGENT'],"BlackBerry");
$ipod = strpos($_SERVER['HTTP_USER_AGENT'],"iPod");
if ($iphone || $android || $palmpre || $ipod || $berry == true)
{
header('Location: http://mobile.site.com/');
}
?>
这是我尝试过的另一个脚本,没有回显任何内容。
<script type="text/javascript" >
if( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) ) {
<?php
echo "I should redirect";
?>
}
</script>
我也尝试过获取屏幕尺寸,但没有显示任何内容。
<script type="text/javascript">
document.write(screen.width);
if (screen.width <= 800) {
window.location = "http://m.domain.com";
}
</script>
我也尝试过下面非常流行的 php 脚本,但它对 $detect 也没什么反应。
<?php
require_once 'Mobile_Detect.php';
$detect = new Mobile_Detect;
echo $detect;
if($detect->isMobile()) {
header('Location: http://mobile.example1.com/');
exit;
}
?>
【问题讨论】:
-
if ($iphone || $android || $palmpre || $ipod || $berry == true) 在 php 中不能这样工作,正确的方法是 if ($iphone || $android || $palmpre || $ipod || $berry) 或 if ($iphone === true || $android === true || $palmpre === true || $ipod === true || $berry === 真)
-
@RobinRijkeboer 好吧,
if($iphone)与if($iphone == true)相同,所以在这个特定情况下它会。 -
@ceejayoz 不,它不会,因为 Strpos 警告:此函数可能返回布尔值 FALSE,但也可能返回计算结果为 FALSE 的非布尔值。使用 === 运算符测试此函数的返回值。 (php.net/strpos)
-
@RobinRijkeboer 同样,在这种 特殊 情况下,它会没事的。这些设备的用户代理中没有一个在字符位置
0处具有搜索字符串。
标签: javascript php html mobile browser-detection