PHP将特定的平板电脑设备排除在移动网站之外


PHP to exclude specific tablet devices from mobile site

我正在使用一个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(/'"中是否允许空格?双重否定的"!!"是什么?我只是自己做这件事,因为最初写这个函数的人正在做。

.(点(在正则表达式中被视为通配符。它几乎用于匹配任何字符。用反斜杠('(转义.,如下所示:如果要使用文字句点,请使用'.。可能有帮助的参考资料:http://www.regular-expressions.info/reference.html

您试图从preg_match()中强制布尔值的方式很糟糕。如果我没有记错的话,在PHP中,0是假的,任何其他数字都是真的。不过,我个人不会相信这一点,我会认为这是一种糟糕的风格。CCD_ 6将结果为真而CCD_ 7将结果为假。只测试整数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;