如何在PHP header()之前发送标头?

时间:2013-01-26 16:22:57

标签: php javascript html

我想在将用户重定向到另一个网站之前在正常的标头标签中执行javascript代码,但我无法弄清楚如何实际使其工作,因此代码将被执行并且访问者将被重定向

我想要以下内容:

<html>
 <head>
  //script here
 </head>
 <body>
 </body>
</html>

<?php header ('Location: example.com') ?>

有人可以告诉我如何正确地执行此操作,因此它不会返回任何已发送的标题&#39;错误?

6 个答案:

答案 0 :(得分:3)

使用output buffering

<?php

ob_start();
echo "Hello\n";

setcookie("cookiename", "cookiedata");

ob_end_flush();

?>

答案 1 :(得分:3)

如果访问者通过点击您网站上的链接访问此页面,您可以发送其他数据,让您的服务器脚本知道JavaScript已启用; e.g。

$('a').each(function() {
    var url = this.href;

    if (url.indexOf("?") !== -1)
        this.href = url + '&js=1';
    else
        this.href = url + '?js=1';
});

这将更改所有链接以包含一个特殊参数,该参数指示是否启用JavaScript。 如果您希望运行的其他JavaScript代码也可以放在这里,那就更好了!

服务器脚本将使用类似if (!empty($_GET['js'])) { ... }的内容来编写一段JavaScript(旧答案2)或立即执行重定向。

旧答案

如果JavaScript被禁用,您可以发送Refresh标头。

<?php

    header('Refresh: 2; url=http://www.example.org');

?>
<html>
 <head>
  //script here
 </head>
 <body>
 </body>
</html>

我必须承认我没有尝试过这个,但它很有可能会起作用

旧答案2

但是,如果您确定已启用JavaScript,则可以让JavaScript在完成后执行重定向;如果url始终相同,则省略PHP代码并使用静态字符串:

<html>
 <head>
  <script>
  //script here
  location = <?php echo json_encode('http://www.example.org'); ?>;
  </script>
 </head>
 <body>
 </body>
</html>

答案 2 :(得分:2)

<小时/> content="<seconds>;url=http://www.the-url.com"


<head>
    <meta http-equiv="REFRESH" content="10;url=http://www.the-domain-you-want-to-redirect-to.com">
</head>
<body>
    <script>
        alert("run before redirect");
    </script>
</body>

http://jsfiddle.net/W9dhW/

答案 3 :(得分:1)

使用Location标头无法做到这一点。如果您的回复包含一个,则会重定向浏览器,并且不会执行任何Javascript。

如果您想在客户端执行某些操作,请在获取重定向的URL之前执行此操作,或者在登陆最终目标URL后执行此操作。

答案 4 :(得分:0)

执行一些JavaScript后,将用户重定向到其他网站

<script type='text/javascript'>
    alert('executing some javascript');

    // redirecting to other website
    window.location.href = "http://example.com";
</script>

您不需要(也不能使用)PHP来实现您的需求

答案 5 :(得分:0)

你必须在html启动之前使用php标头

<?php header ('Location: example.com') ?>
<html>
 <head>
  //script here
 </head>
 <body>
 </body>
</html>

注意:如果您使用<?php header('Location:example.com'); ?>,则以下行的含义较少,因为它会在最开始的行重定向到另一个页面。