tags:

views:

71

answers:

3

Can somebody please help me with this mail script.

I'm simply trying to send an html email and part of the message is from a user textarea, which puts in \r\n.

I seem to be unable to use nl2br or any other similar function. The code below isn't what I'm using but still produces the error.

The code:

$to  = '[email protected]';

$subject = 'Test Subject';

$message_var_1 = 'test1 \r\n test2 \r\n test3';
$message = nl2br("
    <div>
    <div>$message_var_1</div>
    </div>
");

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'X-Mailer: PHP/'.phpversion() . "\r\n";

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

Please help!

+3  A: 
$message_var_1 = 'test1 \r\n test2 \r\n test3';

PHP parses \r and \n only within ", not within '. So nl2br won't apply here.

$message_var_1 = "test1 \r\n test2 \r\n test3";
$message = '<div>
     <div>'.nl2br($message_var_1).'</div>
</div>';

This ought to work.

nikic
Solves the problem. Thanks! But why does php have to 'parse' \r\n in order to replace it with <br/>? That seems unnecessary... or do they do it specifically so that you can put single quotes and exclude it from applying nl2br?
Derek
@Derek `nl2br` replaces newlines with a <br> tag and a newline. It is looking for newlines, not a literal `\r\n` (which is a windows-style newline between `"` quotes) - that's why they need to be parsed for `nl2br` to work.
Maerlyn
+1  A: 

This string contains embedded newlines so you'll end up with a few unwanted <br/>s.

$message = nl2br("
    <div>
    <div>$message_var_1</div>
    </div>
");

You can:

$message = "<div>" . nl2br($message_var_1) . "</div>";

Or, its much easier to use a <pre> tag:

$message = "<pre>$message_var_1</pre>";
Salman A
The `pre` tag though is normally assigned a `font-family: monospace` which in most cases is not what you want.
nikic
A: 

An alternative is to use HEREDOC.

$message = <<<OUTPUT
 <div> some text 
   <div> some more text </div>
 </div>
OUTPUT;
$message = nl2br($message);

Manual link for heredoc here

Paul Dragoonis