PHP nl2br не работает (ни альтернативы) - PullRequest
0 голосов
/ 19 июля 2011

Я работаю над контактной формой. Контактное сообщение может иметь разрывы строк. Их нужно конвертировать в <br>. Ничего не работает Вот мой тестовый код:

mail( $email_to, $email_subject,

      '<html><head><title>' . $email_subject . '</title></head><body>'
    . $text_before_message
    . str_replace( array("\\r\\n","\\r","\\n"), "<br />", stripslashes($email_body) )
    . str_replace( array("\r\n","\r","\n"), "<br />", stripslashes($email_body) )
    . nl2br( stripslashes($email_body) )
    . str_replace( array('\\r\\n','\\r','\\n'), "<br />", stripslashes($email_body) )
    . str_replace( array('\r\n','\r','\n'), "<br />", stripslashes($email_body) )
    . stripslashes( nl2br($email_body) )
    . nl2br($email_body)
    . $text_after_message
    . '</body></html>'

    , 'MIME-Version: 1.0' . "\r\n"
    . 'Content-type: text/html; charset=UTF-8' . "\r\n"
    . 'From: ' . $email_from . "\r\n"
    . 'To: ' . $email_to . "\r\n"    
);

При вводе:

Test.

Test.

Результат в электронном письме (повторяется несколько раз из-за тестов):

Test.Test.

Что разделено регулярными переносами строк (не <br>), если я посмотрю на исходный код.

Почему PHP делает это со мной? Этот вопрос, кажется, задают много, но решения, которые я могу найти ... не имеют значения, что вообще когда-либо.

Как преобразовать разрывы строк в разрывы html?

Ответы [ 3 ]

2 голосов
/ 19 июля 2011

Быстрый ответ: используйте nl2br ().

Другими словами, у меня это работает.Я поставил перед вашим кодом следующий код:

$email_to="...me...";
$email_from=$email_to;
$email_subject="HTML test";

$text_before_message='<div style="color:red">BEFORE</div>';
$text_after_message='<div style="color:red">AFTER</div>';
$email_body=<<<EOD
1
2

3


4 (after two blank lines)
EOD;

В Thunderbird, по крайней мере, я вижу текстовое сообщение с правильным межстрочным интервалом (для nl2br ()).При просмотре в формате HTML я также вижу правильный интервал и красный текст сверху и снизу.

Возможно, вы используете почтовый клиент, который не понимаети хочет увидеть
?!Определение явного типа документа может помочь (но быстрый Google предполагает, что это не так).

Совет отладки: когда все, что должно работать, не работает, проверьте, работает ли это вручную.Т.е. включить тест с использованием блока статического HTML, который использует(и
) и посмотрите, работает ли он.Если вы не знаете, «какую функцию php я использую» - это неправильный вопрос.

0 голосов
/ 18 декабря 2013

Использование двойной обратной косой черты в функции str_replace сработало для меня.

http://php.net/manual/en/language.types.string.php Чтобы указать буквальную одинарную кавычку, экранируйте ее обратной косой чертой (). Чтобы указать буквенную обратную косую черту, удвойте ее (\). Все другие экземпляры обратной косой черты будут обрабатываться как буквальная обратная косая черта: это означает, что другие escape-последовательности, к которым вы могли бы привыкнуть, такие как \ r или \ n, будут выводиться буквально, как указано, а не иметь никакого специального значения.

0 голосов
/ 12 июля 2013

Зачем делать это так сложно, когда это может быть так легко?

//here is the pull from the form
$your_form_text = $_POST['your_form_text'];

//line 1 fixes the line breaks - line 2 the slashes
$your_form_text = nl2br($your_form_text);
$your_form_text = stripslashes($your_form_text);

//email away
$message = "Comments: $your_form_text";
mail("destination_email@whatever.com", "Website Form Submission", $message, $headers);

Вам, очевидно, понадобятся заголовки и, вероятно, будет больше полей, но это ваша текстовая область.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...