Textarea в текстовую почту, проблема с разрывами строк

В форме для заказа я даю возможность добавить несколько замечаний. Люди, участвующие до сих пор, использовали электронную почту для заказа, и на практике они добавили много замечаний помимо фактического заказа. Форма имеет текстовое поле. Когда я вхожу

 Dit is een oefening.
Komt de mail
a) wel aan
b) geeft hij de juiste weergave? 
        

текстовая область, размещенная в PHP, отображается как:

Dit is een oefening.\r\nKomt de mail\r\na) wel aan\r\nb) geeft hij de juiste weergave?

Пока все хорошо, подумал я. Но в почте текст не рвется как задумано, точно воспроизводится как та строка

Это een oefening.\r\nKomt de mail\r\na) wel aan\r\nb) geeft hij de juiste weergave?

Есть ли какой-нибудь способ (желательно простой) отформатировать такую ​​текстовую строку так, как задумано?

Строка ($xtravraag) включена в строку if ($xtravraag != '') {$emailvraagk = "\r\n MAILBERICHT BIJ BESTELLING \r\n\r\n $xtravraag";} else {$emailvraagk = '';}

Я уже пробовал это, это полностью портит результат: if ($xtravraag != '') {$emailvraagk = "\r\n".' MAILBERICHT BIJ BESTELLING'."\r\n\r\n".$xtravraag;} else {$emailvraagk = '';}

приводит к

\r\n MAILBERICHT BIJ BESTELLING \r\n\r\n $xtravraag

и этот заголовок изначально работал нормально.

Заголовки почты включают:

        'Mime-Version: 1.0' . "\r\n" .
        'Content-Type: text/plain; charset=UTF-8' . "\r\n" .         
        'Content-Transfer-Encoding: quoted-printable' . "\r\n" .
        'X-Mailer: PHP/' . phpversion()

Удаление кодировки передачи невозможно. Это необходимо для часто используемых диакритических знаков. Для этого требуется кодировка UTF-8.

По запросу код на страницах

 <fieldset><legend>Overige vragen of opmerkingen die geen bestelling zijn</legend>
  <textarea name='xtravraag' id='xtravraag' cols='76' rows='5'> </textarea>
  </fieldset>

Затем опубликовал

if (isset($_POST['xtravraag'])) {$xtravraag = $mysqli->real_escape_string(trim($_POST['xtravraag']));} else{$xtravraag='';}
echo  "extravraag: $xtravraag <br>";        //MOET WEG BIJ OPLEVERING 

включая эхо, показывающее всю строку

решено

real_escape_string сделал грязный трюк здесь.


person David de Beer    schedule 04.11.2019    source источник
comment
Вы используете двойные " или одинарные ' кавычки, когда добавляете сообщение в переменную, используемую в почтовой функции?   -  person Dimitris Filippou    schedule 04.11.2019
comment
Изначально я использовал двойные кавычки. Спасибо за подсказку, сразу попробовал. Переход на одинарные кавычки увы не сработал; разделение его на то, как он работает идеально, для линий формы делает его еще хуже. адаптировал примеры.   -  person David de Beer    schedule 04.11.2019
comment
Можете ли вы включить полный код, используемый для чтения текстовой области и отправки электронной почты?   -  person Dimitris Filippou    schedule 04.11.2019
comment
Не используйте real_escape_string. Вместо этого используйте подготовленные операторы. Это может быть причиной вашей текущей проблемы.   -  person Dharman    schedule 04.11.2019
comment
Я согласен, что здесь виноват real_escape_string   -  person Dimitris Filippou    schedule 04.11.2019
comment
Спасибо, парни! Это сработало :) и, поскольку у строки нет другой функции, кроме как просто добавление к этому электронному письму, я осмеливаюсь опустить real_escape_string   -  person David de Beer    schedule 04.11.2019


Ответы (2)


Иногда функция mail() неправильно отображает разрывы строк "\r\n", вы можете попробовать сделать несколько строк следующим образом:

if ($xtravraag != '') {$emailvraagk = "
 MAILBERICHT BIJ BESTELLING 

 $xtravraag";} else {$emailvraagk = '';}

Или используйте PHP_EOL, чтобы включить кроссплатформенную поддержку:

if ($xtravraag != '') {$emailvraagk = PHP_EOL." MAILBERICHT BIJ BESTELLING ".PHP_EOL.PHP_EOL." $xtravraag";} else {$emailvraagk = '';}
person Hasta Dhana    schedule 04.11.2019
comment
Я сомневаюсь, что это так. Пока все шло нормально, это просто разрывы строк внутри строки $xtravraag, вызывающие сбой. - person David de Beer; 04.11.2019

Попробуйте отформатировать содержимое текстовой области с помощью функции php nl2br().

person François Huppé    schedule 04.11.2019
comment
Это просто вставит теги <br /> в электронное письмо как обычный текст: Content-Type: text/plain; charset=UTF-8 - person CD001; 04.11.2019
comment
о, извини, мой плохой! - person François Huppé; 04.11.2019