ob_clean()之后PHP字符串丢失

时间:2012-08-24 07:09:47

标签: php search redirect header

我的网页上运行了一个搜索脚本,正在扩展搜索功能。目前,它搜索特定的动态用户字段。现在,如果第一次搜索没有结果,我想进行二次搜索。

如果有人搜索“健康”,则搜索网址输出为:

“的 * COM / .PHP DO = GETALL&安培;?的研究 =健康”

如果没有结果,则会执行以下操作:

    if ( preg_match( "~/(.*?)$~msi", $_SERVER[ "REQUEST_URI" ], $vv ))
    {
        $string = strstr( $vv[1], 'health=');
        $n_string = explode("=",$string);
        $url = 'http://www.****.com/***.php?do=getall&enjoys=' . $_GET[$n_string[1]];
        ob_clean();
        header('Location:' . $url);
    }

该网址将被重定向到另一个搜索字段。 如果我不包含ob_clean()或某些变体,则会出现“已发送标头”错误。

问题是,在运行ob_clean()之后,$ n_string中的值将丢失。

感谢您的帮助!

----编辑----

谢谢大家的回答。我找到了我的代码中的错误的解决方案。             $ url ='http:// www。 * .com / .php?do = getall& enjoys ='。 $ _GET [$ n_string [1]];

应该是

        $url = 'http://www.****.com/***.php?do=getall&enjoys=' . $n_string[1];

虽然允许我清理使用ob_clean()的方法,但您的回复很有帮助。

3 个答案:

答案 0 :(得分:0)

尝试ob_end_clean()而不是ob_clean()。 ob_clean()函数只清除最顶层输出缓冲区的内容,但不关闭它。

答案 1 :(得分:0)

为什么不先设置ob_clean() - 在设置字符串之前?

答案 2 :(得分:0)

您应首先通过在加入之前拨打 ob_start(); 来启动输出缓冲。

参考以下链接 ob_clean doesn't clean the output before the header file?