PHP逻辑运算符&& ||题

时间:2011-06-06 23:55:23

标签: php

我试图忽略IE7和IE8,但是让操作员正常工作有点麻烦。

<?php 
    if(stristr(strtolower($_SERVER['HTTP_USER_AGENT']), "msie 8") && (strtolower($_SERVER['HTTP_USER_AGENT']), "msie 7") == false ){
    echo "<script type=\"text/javascript\"> 
       $(document).ready(function() {
        // ok
        });
    </script>";
}?>

我的其他选项没有给我任何错误,但是没有正常运作:

<?php 
    if(stristr(strtolower($_SERVER['HTTP_USER_AGENT']), "msie 8" || ($_SERVER['HTTP_USER_AGENT']), "msie 7") == FALSE){
    echo "<script type=\"text/javascript\"> 
       $(document).ready(function() {
        // OK
        });
    </script>";
}?>

2 个答案:

答案 0 :(得分:2)

!$_SERVER['HTTP_USER_AGENT']看起来不对劲。它试图否定一个字符串 - 它会给你一个布尔值,它的值永远不会包含'MSIE'(因为它唯一可能的值是零(假)和1(真)。

你可能想要移动!在stristr之前。

现在意识到stristr将采用一组操作数(用户代理字符串和“MSIE 8”)。为了测试第二个字符串,您需要第二个stristr,如下所示:

<?php 
    if(!stristr($_SERVER['HTTP_USER_AGENT'], "msie 8") &&
       !stristr($_SERVER['HTTP_USER_AGENT'], "msie 7"))
    {
        echo "<script type=\"text/javascript\"> 
            $(document).ready(function() {
                // OK
            });
            </script>
        ";
    }
?>

注意,您根本不需要strtolower,因为您使用的是stristr(不区分大小写)。

答案 1 :(得分:0)

我猜你的意思是你只想打印if内的代码,如果它是不是 IE7 / IE8。

在这种情况下,您需要:

<?php 
    if( (stristr($_SERVER['HTTP_USER_AGENT'], "msie 8") === FALSE) && 
        (stristr($_SERVER['HTTP_USER_AGENT'], "msie 7") === FALSE) ) {
        echo "<script type=\"text/javascript\"> 
            $(document).ready(function() {
            // ok
            });
            </script>";
    }
?>

您错过了对stristr的第二次通话。同样如cHao所述,您需要检查严格的相等性(类型),并且不需要strtolower。即使它以某种方式证明严格的相等不是真正必要,使用严格的检查可以帮助你记住并在代码中清楚地说明发生了什么。

相关问题