PHP在电子邮件中新的换行符

我有以下代码:

$message = "Good news! The item# $item_number on which you placed a bid of \$ $bid_price is now available for purchase at your bid price.\n The seller, $bid_user is making this offer.\n \nItem Title : $title\n \nAll the best,\n $bid_user\n $email\n "; echo $message; $htmlContent = $baseClass->email_friend($item_number, $title, $bid_price, $bid_user, $mcat, $message, $email, $VIEWSTATE, $EVENTVALIDATION, $URL); 

问题是新换行符 (\n)不起作用。

尝试用\r\n代替\n

\ n和\ r \ n之间的区别

应该指出的是,这适用于电子邮件中的退换货。 对于其他情况,请参阅rokjarc的答案 。

我知道这是一个古老的问题,但无论如何这可能会帮助别人。

为了这个目的,我倾向于使用PHP_EOL (由于跨平台兼容性)。

 echo "line 1".PHP_EOL."line 2".PHP_EOL; 

如果您打算在浏览器中显示结果,则必须使用"<br>"

编辑:因为你确切的问题是关于电子邮件,事情有点不同。 对于纯文本电子邮件,请参阅Brendan Bullen 接受的答案 。 对于HTML电子邮件,您只需使用HTML格式。

你是使用单引号还是双引号构build这个string? \ r和\ n只能使用双引号以及embedded的variables。 例如:

 $foo = 'bar'; echo 'Hello \n $foo!'; 

会输出:

 Hello \n $foo! 

但:

 $foo = 'bar'; echo "Hello \n $foo!"; 

会输出:

 Hello bar! 

如果输出为html或html电子邮件,则需要使用<br><br />而不是\n

如果这只是一个文本电子邮件:你可能使用'而不是" ?虽然然后你的价值观不会插入…

你可以使用"Line1<br>Line2"

编辑:也许你的class级发送电子邮件有一个HTML电子邮件的选项,然后你可以使用<br />

1) 双引号

 $output = "Good news! The item# $item_number on which you placed a bid of \$ $bid_price is now available for purchase at your bid price.\nThe seller, $bid_user is making this offer.\n\nItem Title : $title\n\nAll the best,\n $bid_user\n$email\n"; 

如果你使用双引号,那么\ n将工作(浏览器中不会有换行符,但在浏览器中看到源代码 – \ n字符将被replace为换行符)

2) 单引号不具有以上双引号的效果:

 $output = 'Good news! The item# $item_number on which you placed a bid of \$ $bid_price is now available for purchase at your bid price.\nThe seller, $bid_user is making this offer.\n\nItem Title : $title\n\nAll the best,\n $bid_user\n$email\n'; 

所有的字符将被打印(甚至variables!)

3) 在HTML中换行

 $html_output = "Good news! The item# $item_number on which you placed a bid of <br />$ $bid_price is now available for purchase at your bid price.<br />The seller, $bid_user is making this offer.<br /><br />Item Title : $title<br /><br />All the best,<br /> $bid_user<br />$email<br />"; 
  • 浏览器中会出现换行符,variables将被replace为内容。

如果您输出的代码为html – 更改/ n – >
并做echo $ message;

当我们用编程语言插入任何换行符时,这个char代码就是“\ n”。 PHP确实输出,但HTML无法显示,由于htmls换行符
。 如此简单的方法来做这个工作是取代所有的“\ n”与“
“所以代码应该是

 str_replace("\n","<br/>",$str); 

添加这个代码后,你不必使用pre标签所有的输出oparation。

从这个网站复制了这个答案 :