2011-07-19 30 views
0

我正在处理联系表单。联系消息可能有换行符。他们需要转换为<br>。没有任何工作。这里是我的测试代码:PHP的nl2br不工作(也不是替代品)

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分隔符?

回答

2

快速回答:使用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; 

在雷鸟,至少,我看到正确的行间距(为nl2br()的)文本电子邮件。当我以HTML格式查看时,我还会看到正确的间距,以及顶部和底部的红色文字。

有可能您使用的电子邮件客户端不明白< br />,并希望看到< br> ?!指定一个明确的文档类型可能会有帮助(但快速谷歌表明它不会)。

调试提示:当所有应该工作的东西都没有时,检查是否手动工作。即包括使用一块静态HTML的测试,该测试使用<(和< br>)并查看它是否有效。如果它不知道“我使用哪个PHP函数”是错误的问题。

+0

今天早上调试的时候,我发现换行符已经被HTML转义了,所以我需要这个:'。 str_replace(array(' ',' ',' '),'
',stripslashes($ email_body))'无论如何。 – DSKrepps

-1

为什么变得如此艰难,当它可以如此简单?

//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("[email protected]", "Website Form Submission", $message, $headers); 

你显然需要标题,可能有更多的字段,但这是你的textarea。

0

在str_replace函数中使用双反斜杠为我工作。

http://php.net/manual/en/language.types.string.php 要指定文字单引号,请使用反斜杠()将其转义。要指定文字反斜杠,请将其加倍(\)。所有其他反斜杠实例将被视为文字反斜杠:这意味着您可能习惯的其他转义序列(如\ r或\ n)将按照指定的字面输出,而不是具有任何特殊含义。