如何将\ n转换为换行符以通过电子邮件发送PHP?

时间:2015-01-31 14:55:13

标签: php email newline

我的代码如下

$ID = mysqli_real_escape_string($cnx, trim($data->id));
$MSG = mysqli_real_escape_string($cnx, trim($data->message));

$query = "REPLACE INTO mytbl ".
           "(id, msg, dateentry, status, rate) ".
           "VALUES ('$ID', '$MSG', NOW(), 'ok', '$RATE')";

$result =mysqli_query($cnx, $query) or die ("Can't execute query!");

$to = 'my@gmail.com';
$subject = 'my report';
$message = 'Message From User on:  '. $MSG  . "\r\n";
$headers = 'From: anonymous@mymail.com' . "\r\n" .
           'Reply-To: anonymous@mymail.com' . "\r\n" .
           'X-Mailer: PHP/' . phpversion();

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

在我的消息($ MSG)中,它包含新行,由\ n表示。因此,当发送电子邮件时,\ n持续存在,而不是创建新行,它保持为\ n。我希望它是一个新的行而不是\ n在电子邮件中显示。

我已经阅读了How to replace \r & \n with <br/>?,并且想想也许我可以使用双引号而不是单引号,并使用nl2br,但没有成功。也许我的价值来自其他地方(即$ data-&gt;消息),所以我不知道如何使它成为单引号或双引号字符串。有什么亮光吗?

谢谢!

(注意$ MSG既用于数据库插入和电子邮件发送)

3 个答案:

答案 0 :(得分:1)

不知道如何构建$ MSG,你可以尝试这样的事情:

$MSG = str_replace("\\n","\n",$MSG);

在将$ MSG添加到$ message之前。

只要你想要\ n表示换行符而不是\\ n。

,就应该使用双引号

答案 1 :(得分:1)

  

删除mysqli_real_escape_string对我有用。 - Elye

^正如我最初的评论后所说的那样。 ^

从我的意见中摘取问题:

使用mysqli_real_escape_string()很可能是原因。

它正在逃避角色,并且最有可能出现换行符。

我不明白为什么你要使用它。您正在发送邮件,而不是查询数据库。去掉它。

mysqli_real_escape_string()与发送mail()无关。

如果查询是&#34;不是&#34;来自用户输入,您不需要转义数据。

如果您需要从不希望在DB中作为INSERT / UPDATE的表单过滤用户输入,请使用PHP的过滤器http://php.net/manual/en/filter.filters.php,而不是MySQL。

您还可以为外发邮件设置新变量并使用PHP的过滤器;这就是他们的目的。

答案 2 :(得分:0)

根据mail()文档,正文消息必须包含换行符,包括回车符。

由于您的电子邮件似乎不是多部分 - 使用HTML正文 - 也就是说,至少您没有指定它是,您应该能够实现所需的

preg_replace("/(?<=[^\r]|^)\n/", "\r\n", $MSG);

将用\n替换单独的\r\n

但是,我建议不要在mysqli_real_escape_string上使用,因为您没有使用它来构建SQL语句。