Php 替换换行符不起作用

Php 替换换行符不起作用,php,forms,email,html-email,Php,Forms,Email,Html Email,因为我的电子邮件表格,我真的很生气。我有一张访客提交问题的表格。提交消息后,消息等将首先存储在数据库中。存储成功后,将向我的电子邮件地址发送一封电子邮件 这很顺利,除了消息部分。它一直显示(这些换行符也存储在db中),而我试图用甚至ntblr()替换它。什么都不管用。我到底做错了什么 获取消息内容: $message = safe($mysqli,$_POST['message']); if (!$stmt) { echo "sendingEmailError";

因为我的电子邮件表格,我真的很生气。我有一张访客提交问题的表格。提交消息后,消息等将首先存储在数据库中。存储成功后,将向我的电子邮件地址发送一封电子邮件

这很顺利,除了消息部分。它一直显示(这些换行符也存储在db中),而我试图用
甚至ntblr()替换它。什么都不管用。我到底做错了什么

获取消息内容:

$message = safe($mysqli,$_POST['message']);
if (!$stmt) {
        echo "sendingEmailError";   
    } else {

        //Send email
        $to = "<my@email.com>";         
        $subject = "Website message from ".$account."";
        $body = " 

        <div> ".nl2br($message)." </div>";

        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers .= 'From: New email from '.$account.' <'.$email.'>' . "\r\n";

        mail($to, $subject, $body, $headers);   

        echo "sendingEmailSuccess"; 

    }
safe()函数是:mysqli\u real\u escape\u string

电子邮件代码:

$message = safe($mysqli,$_POST['message']);
if (!$stmt) {
        echo "sendingEmailError";   
    } else {

        //Send email
        $to = "<my@email.com>";         
        $subject = "Website message from ".$account."";
        $body = " 

        <div> ".nl2br($message)." </div>";

        $headers  = 'MIME-Version: 1.0' . "\r\n";
        $headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
        $headers .= 'From: New email from '.$account.' <'.$email.'>' . "\r\n";

        mail($to, $subject, $body, $headers);   

        echo "sendingEmailSuccess"; 

    }
if(!$stmt){
回显“发送电子邮件错误”;
}否则{
//发送电子邮件
$to=“”;
$subject=“来自“$account.”的网站消息;
$body=”
“.nl2br($message)。”;
$headers='MIME版本:1.0'。“\r\n”;
$headers.=“内容类型:text/html;字符集=iso-8859-1”。“\r\n”;
$headers.=“发件人:来自“$account”的新电子邮件。”“\r\n”;
邮件($to、$subject、$body、$headers);
回显“发送电子邮件成功”;
}

\r\n
应替换为

您的mysqli\u real\u escape\u字符串通常通过转义来更改换行符。在此之后,你的nl2br将不再命中任何东西

尝试使用原始消息并对其应用nl2br。

您是否尝试过正则表达式

$message = preg_replace("/(\\n|\\r)+/ui", '<br />', $message);
$message=preg\u replace(“/(\\n |\\r)+/ui,”
,$message);

另外,检查mysql表中的数据,并将其转义到一个条斜杠

您确定您的文本包含换行符和回车符,还是这些字符不知何故被损坏,现在是
\
n
\
r
文本,例如,
\r\n
作为回车符/换行符是2个字节,
\r\n
作为反斜杠的文字字符,
r
n
是4个字节。在任何情况下,你都不应该建立自己的mime电子邮件。使用PHPMailer或Swiftmailer,两者都使发送html电子邮件变得微不足道。在这种情况下,您可以使用PHP_EOL而不是\r\nPHP_EOL,因为它可能是特定于操作系统的,而
\r\n
在这里有一个特殊的操作系统独立的含义。除了@MarcB所说的,还可以执行
var_dump($body)
并发布结果。@user986959:无意义。PHP_EOL是本地机器的EOL字符。如果服务器是Unix机器,则PHP\u EOL是
\n
,与Windows机器提交的
\r\n
不匹配。我觉得自己像个白痴。你完全正确。现在可以作为符咒使用:')