PHP将从移动站点中排除特定的平板电脑设备
我使用的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(平板电脑),我想为我的桌面站点而不是手机提供服务,因
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作为返回值而不是嘘声。回答得很好,因为你发现了两个部分都不能正常工作。