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

PHP将从移动站点中排除特定的平板电脑设备,php,http,mobile,tablet,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(平板电脑),我想为我的桌面站点而不是手机提供服务,因

我使用的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_代理返回的内容时,我决定查找字符串:

Nexus7和WindowsNT6.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)/”中是否允许使用空格?双负数是什么“!!”?我只是自己做的,因为最初编写此函数的人正在做它。

A
(dot)在正则表达式中被视为通配符。它几乎用于匹配任何字符。请使用反斜杠(
\
)对
进行如下转义:
\.
,如果要使用文字句点。这可能有助于:

您试图从
preg_match()强制布尔值的方式
很糟糕。如果我没有弄错的话,0是假的,PHP中的任何其他数字都是真的。不过我个人不会相信这一点,我认为这是一种不好的风格。
!0
将因此成为真的,
!!0
将成为假的。只需测试整数0,而不是真的

有关
preg_match()
的文档:

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


另外,在这个函数中有两个
return false;
语句是多余的。为什么不测试iPod、iPhone等呢?如果
没有返回true;
,那么
return false;

preg\u match将返回0、1或false(错误时)。双负数只会将整数转换为布尔值。因此,任何非零值都是真的,零是假。不要这样做。这是一个维护噩梦。如果你坚持要为不同的页面提供服务,请使用一个有帮助的库。我通过使用GT-P3113而不是Windows NT 6.1对选项卡2进行修复,并使用1和0作为返回值而不是嘘声。回答得很好,因为你发现了两个部分都不能正常工作。