重定向PHP代码不适用于IE 9

时间:2014-02-06 20:12:28

标签: php internet-explorer

该页面不会重定向IE9,但可以在Chrome和IE 11中使用。当用户单击没有完成凭据的登录按钮时,代码应显示文本和错误消息。该页面会粘贴到网址http://xxx.xxx.com/customer.php?action_nm=custlogin,并且不会响应以下代码。

IE9及以下版本是否存在导致重定向无法在PHP中运行的已知问题?

    if(!empty($_POST["email"])){
        $_SESSION["Email"] = $_POST["email"];

        redirect("customer.php?action_nm=custlogin&action=xpwd"); 
        exit; 
        }
        else
        {

        redirect("customer.php?action_nm=custlogin&action=nocredentials"); 
        exit;           
        }
    }

这是下面的功能:

function redirect($s){
echo '<script language="JavaScript">
function redir()  { document.location="'.$s.'"; }
console.log("' . $s . '")
redir();

 </script>';
}

2 个答案:

答案 0 :(得分:1)

我认为您的重定向功能出现故障,因为您没有在那里发布,我发布了自己的版本。

我使用此功能进行重定向,到目前为止还没有任何问题。

 function redirect($url) {
        try {
            if (!headers_sent()) {
                @header('Location: ' . $url);
                exit;
            } else
                throw new Exception();
        } catch (Exception $ex) {
            // Headers already sent!! Redirect via Javascript?
            echo '<script type="text/javascript">';
            echo 'window.location.href="' . $url . '";';
            echo '</script>';
            // Javascript disabled, redirect via metatags?
            echo '<noscript>';
            echo '<meta http-equiv="refresh" content="0;url=' . $url . '" />';
            echo '</noscript>';
            exit;
        }
    }

答案 1 :(得分:0)

为了获得重定向,您必须将响应的HTTP标头放入以下行:

Location: customer.php?action_nm=custlogin&action=xpwd

现在,要将 ANYTHING 放入标题中,您可能还没有向输出缓冲区写入任何内容,或者您​​可以做的就是将内容放入HTTP正文中。

换句话说,无论你在该行之前呈现的是什么(即使是空白空间)都会使这种方法不起作用。

PHP的最佳实践是在第一个字节之外打开标记:

<?php

并且永远不要在文件中关闭它。

现在,在任何其他输出之前,您可以使用header()函数将该行放入HTTP标头。所以你的页面应该是这样的:

<?php

header('Location: customer.php?action_nm=custlogin&action=xpwd');

毫无疑问,这是有效的。如果不是,那是因为响应脚本的某个部分已经填充了输出缓冲区。没有办法绕过这个论点。