【问题标题】:Warning: Header may not contain more than a single header, new line detected警告:标题不能包含多个标题,检测到新行
【发布时间】:2013-12-27 11:16:48
【问题描述】:

我有一个关于 PHP 错误的问题。我经历了其他类似的问题,并应用它,但我仍然有这样的问题,所以我问它。

情况是这样的。有一个文本框称为特殊指令;如果我只放一条线就可以工作,但如果我放多条线,就会导致这样的问题。我放了 urlencode(str) 来解决问题,但它仍然出现。我需要改变什么? T.T

错误消息是“警告:标头不能包含多个标头,检测到新行。”

if($_POST['Submit'] == 'Submit Order'){
    $today = date('D M dY');
    $to_time = date('h:i a');
    $hours = substr($to_time, 0, -6);
    $minutes = substr($to_time, -5, 2);
    $seconds = substr($to_time, -2);
    $total_seconds = ($hours * 3600) + ($minutes * 60) + $seconds;

    $date123 = $_POST['day'];
    $date_post = date('D M dY',$date123);

    $time_post = $_POST['time']; 
    $hours_post   = substr($time_post, 0, -6);
    $minutes_post = substr($time_post, -5, 2);
    $seconds_post = substr($time_post, -2);
    $total_seconds_post = ($hours_post * 3600) + ($minutes_post * 60) + $seconds_post;

    $tip_amo = $_POST["tip_amount"];
    $deliv_mails = $_POST["deliv_mails"];
    $coupon_no = $_POST['coupon_no'];
    $minorder = $_POST['minorder'];
    $subtotal_amount = $_POST['subtotal_amount'];
    $payment_type = $_POST['payment_type'];
    $comments = addslashes($_POST['comments']);
    $coupon_code = $_REQUEST["coupon_code"];
    $customer_comments = get_field(CART,"additional_text","session_id='$sessionid'");

    if($comments == ''){
        $comments1 = $customer_comments;
    }else{
        $comments1 = $comments;
    }

    if($time_post!='') {
        if($today==$date_post){
            $query = [
                'day' => $date123,
                'time' => $time_post,
                'coupon_no' => $coupon_no,
                'minorder' => $minorder,
                'subtotal_amount' => $subtotal_amount,
                'payment_type' => $payment_type,
                'comments' => $comments1,
                'coupon_code' => $coupon_code,
                'tip_amount' => $tip_amo,
                'deliv_mails' => $deliv_mails,
                'd' => $address
            ];
            header('Location: details_info_order.php?' . http_build_query($query));
            exit;
        }else{
            $query = [
                'day' => $date123,
                'time' => $time_post,
                'coupon_no' => $coupon_no,
                'minorder' => $minorder,
                'subtotal_amount' => $subtotal_amount,
                'payment_type' => $payment_type,
                'comments' => $comments1,
                'coupon_code' => $coupon_code,
                'tip_amount' => $tip_amo,
                'deliv_mails' => $deliv_mails,
                'd' => $address
            ];
            header('Location: details_info_order.php?' . http_build_query($query));
            exit;
        }
    }
}

警告:标头不能包含多个标头,检测到新行。在 /home4/mikehan2/public_html/mikehan7/final_checkout_block.php 第 64 行

这是确切的错误消息。

【问题讨论】:

  • 您是否为 SO 格式化了代码?文本必须在一个难看的长行中(不能使用换行符来提高标题的可读性)。
  • 哈哈...我知道它在一个丑陋的单行...
  • 你不能在这样的字符串中使用urlencode()
  • @Phil 我需要使用什么? T.T
  • @phil 你是对的。 urlencode 是一个函数,不能像这样在字符串集中使用。

标签: php


【解决方案1】:

你真的应该使用像http_build_query()这样的东西;无需手动进行 URL 编码,也无需杂乱的字符串连接,例如

$query = array(
    'day' => $date123,
    'time' => $time_post,
    // etc
);
header('Location: details_info_order.php?' . http_build_query($query));
exit;

【讨论】:

  • 我在不同的行号上仍然有同样的问题,但感谢您的帮助。
  • @BryanK。请使用更新后的代码以及错误消息的准确和完整详细信息来编辑您的问题。
  • @BryanK。如果您的代码仍然不起作用,您为什么要接受这个答案?
  • @BryanK。显然,短数组语法只适用于 PHP 5.4 或更高版本。我已经根据您对 PHP 版本的说明修改了我的答案。
  • 这个也不起作用,我正在寻找其他地方进行更改。我希望有这样的问题,例如如果我将 cmets 放在两个不同的行中,它会产生两个不同的 cmets 冲突。我不知道...
【解决方案2】:

您的某些变量包含多行文本,可能是 COMMENTS。 使用urlencode:

'comments' => urlencode($comments1),
...

【讨论】:

    猜你喜欢
    • 2013-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    • 2017-06-20
    • 1970-01-01
    相关资源
    最近更新 更多