2013-06-03 86 views
0

排除特定的平板设备我使用的是PHP函数看起来像这样检查用户到我的网站是否是在移动设备上:PHP从移动网站

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

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

所以看什么这些设备从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)/'”中允许有空格吗?双重否定“!!”是什么?我只是自己做这件事,因为最初编写这个函数的人在做它。

+0

preg_match将返回0,1或false(出错)。双重否定只会将整数转换为布尔值。所以任何非零值为真,零为假。 – Octopus

+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;

+0

我通过使用GT-P3113代替Windows 2的Tab 2,并使用1和0作为返回值而不是bools来修复它。很好的答案,因为你捕捉到两部分功能不正常。 – user2344015