PHP从移动网站中排除特定的平板电脑设备

时间:2013-06-03 22:51:37

标签: php http mobile tablet

我正在使用这样的php函数来检查我的网站的用户是否在移动设备上:

function isMobileCheckByAgent()
{
return !!preg_match('/(iPod|iPhone|Android|BlackBerry|SymbianOS|SCH-M\d+|Googlebot-Mobile)/',$_SERVER['HTTP_USER_AGENT']);
}

现在我有两个设备,华硕Nexus 7和Galaxy Tab(平板电脑),我想为我的桌面网站而不是移动设备提供服务,因为他们的大屏幕可以处理它。

所以看看那些设备从HTTP_USER_AGENT返回的内容我决定寻找字符串:

Nexus 7和Windows NT 6.1

所以我写道:

function isMobileCheckByAgent()
{
 if(!!preg_match('/(Nexus 7|Windows NT 6.1)/',$_SERVER['HTTP_USER_AGENT']) == true)
 {
 return (false);
 }
 elseif(!!preg_match('/(iPod|iPhone|Android|BlackBerry|SymbianOS|SCH-M\d+|Googlebot-Mobile)/',$_SERVER['HTTP_USER_AGENT']) == true)
 {
 return (true);
 }
 else
 {
 return(false);
 }
}

但不可否认的是,我的PHP技能缺乏,而且我在这里失败了。我想切换到桌面网站的设备仍然在移动网站上提供服务。有谁知道我哪里出错了,或者我怎么能改进这个功能来回归我想要的东西?在“preg_match('/(Nexus 7 | Windows NT 6.1)/'”中是否允许使用空格?双重否定“!!”是什么?我只是自己这样做,因为编写此函数的人最初正在这样做。

1 个答案:

答案 0 :(得分:0)

.(点)被视为正则表达式中的通配符。它几乎用于匹配任何角色。如果您想使用文字句点,请使用反斜杠(.)逃离\,如下所示:\.。可能有用的参考:http://www.regular-expressions.info/reference.html

你试图强迫来自preg_match()的布尔值的方式很差。如果我没有弄错,0是假的,PHP中的任何其他数字都是真的。我个人不会依赖于此,并认为它的风格很糟糕。因此,!0将导致为真,!!0将导致为假。只测试整数0,而不是真相。

preg_match()上的文档:http://us2.php.net/manual/en/function.preg-match.php

此外,if()的工作方式是测试括号内的表达式。如果该表达式的计算结果为true,则运行下一个语句(无论是单个语句还是块语句)。有布尔运算符(即==||等)返回一个布尔值。例如,$test == 0将评估为true或false,具体取决于$test是否计算为整数0。

此外,在此函数中包含两个return false;语句是多余的。为什么不测试iPod,iPhone等?如果那不是return true;,那么return false;