Мой код, как показано ниже
$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 используется для вставки БД и отправки по электронной почте)
Не зная ничего о том, как устроен $ MSG, вы можете попробовать что-то вроде этого:
$MSG = str_replace("\\n","\n",$MSG);
Перед добавлением $ MSG в ваше сообщение $.
Двойные кавычки следует использовать всякий раз, когда вы хотите, чтобы \ n означало символ новой строки, а не \\ n.
Удаление 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; вот для чего они здесь.
В соответствии с почта () ДОКУМЕНТАЦИЯ В теле сообщения ДОЛЖНЫ быть разрывы строк, включая возврат каретки.
Так как ваша электронная почта не выглядит многочастной — с телом HTML, то есть, по крайней мере, вы не указываете, что это так, вы должны быть в состоянии достичь того, что нужно с
preg_replace("/(?<=[^\r]|^)\n/", "\r\n", $MSG);
который заменит одинокого \n
с \r\n
,
Я бы предложил, однако, не использовать на mysqli_real_escape_string
, поскольку вы не используете его для построения оператора SQL.