электронная почта — Как сделать так, чтобы \ n преобразовать в новую строку для отправки по электронной почте PHP?

Мой код, как показано ниже

$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 = '[email protected]';
$subject = 'my report';
$message = 'Message From User on:  '. $MSG  . "\r\n";
$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();

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

В моем сообщении ($ MSG) оно содержит новую строку, которая представлена ​​\ n. Поэтому, когда электронное письмо отправлено, \ n сохраняется, вместо создания новой строки, оно остается как \ n. Я хотел бы, чтобы это было новой строкой вместо \ n отображения в электронном письме.

Я читал о Как заменить & \ n с <бр />?, и, возможно, я мог бы использовать двойные кавычки вместо одинарных и работать с nl2br, но безуспешно. Возможно, мое значение берется откуда-то еще (например, $ data-> message), поэтому я не знаю, как сделать его одинарной или двойной кавычкой. Любой свет, чтобы пролить?

Спасибо!

(Обратите внимание, что $ MSG используется для вставки БД и отправки по электронной почте)

-1

Решение

Не зная ничего о том, как устроен $ MSG, вы можете попробовать что-то вроде этого:

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

Перед добавлением $ MSG в ваше сообщение $.

Двойные кавычки следует использовать всякий раз, когда вы хотите, чтобы \ n означало символ новой строки, а не \\ n.

1

Другие решения

Удаление mysqli_real_escape_string работает для меня. — Elye

^ как сказано после моих первоначальных комментариев. ^

Взято из моих комментариев, чтобы закрыть вопрос:

С помощью mysqli_real_escape_string() скорее всего причина.

Скорее всего, это экранирование символов и символов новой строки.

Я не понимаю, почему вы используете это. Вы отправляете почту, а не запрашиваете БД. Убери это.

mysqli_real_escape_string() не имеет ничего общего с отправкой mail(),

Если запрос «не» поступает из пользовательского ввода, вам не нужно экранировать данные.

Если вам нужно отфильтровать пользовательский ввод из формы, которая не будет отображаться как INSERT / UPDATE в БД, используйте фильтры PHP http://php.net/manual/en/filter.filters.php, не MySQL.

Вы также можете установить новую переменную для исходящей почты и с помощью фильтров PHP; вот для чего они здесь.

1

В соответствии с почта () ДОКУМЕНТАЦИЯ В теле сообщения ДОЛЖНЫ быть разрывы строк, включая возврат каретки.

Так как ваша электронная почта не выглядит многочастной — с телом HTML, то есть, по крайней мере, вы не указываете, что это так, вы должны быть в состоянии достичь того, что нужно с

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

который заменит одинокого \n с \r\n,

Я бы предложил, однако, не использовать на mysqli_real_escape_string, поскольку вы не используете его для построения оператора SQL.

0
По вопросам рекламы [email protected]