【问题标题】:PHP - Form mail converting line breaks to spacesPHP - 将换行符转换为空格的表单邮件
【发布时间】:2012-01-03 19:40:27
【问题描述】:

我在用户 cmets 的表单中有一个<textarea>,当内容传递给表单邮件时,换行符被转换为空格。如何保留表单用户输入的换行符?

相关php:

$comments = $_REQUEST['comments'];
// This grabs the comments from the submitted form

//...

$to = $configEmail;

$subject = "Website Order Received: $offer";

$contents = "blah blah blah...";
if (!empty ($comments)) {
    $contents = $contents."\nComments: $comments\n\n";
}

//...

mail($to, $subject, $contents);

并且在表单的 HTML 末尾...(如果提交错误,则将 cmets 放入表单中,因此数据不会丢失)

<label>Comments / Questions</label>
<textarea name="comments"><?php echo $comments; ?></textarea>

如果我输入:

line 1
line 2
line 3

如果表单提交时出现错误,情况仍然如此,因此$comments = $_REQUEST['comments']; 肯定会保留换行符。但是纯文本电子邮件给了我:

line 1 line 2 line 3

如何保留换行符?

【问题讨论】:

  • 如果您使用\r\n 而不是仅仅使用\n,它会是什么样子。可能只是您挑剔的电子邮件客户端。
  • 我有/n 的任何地方都可以正常工作。我的猜测是$comments 中的字符串没有/n,因为它的行破坏了其余电子邮件内容的方式。
  • 您是用纯文本还是 html 发送邮件?我理解第一个,但到目前为止的答案建议第二个..无论如何,它是\n,而不是/n
  • 它是纯文本,不是 HTML。你是对的,它是\n
  • 我曾经遇到过这个问题。做一件事,在发送之前,将所有\ns 替换为\n\r。我不知道这是不是正确的答案,但值得一试。

标签: php html forms line-breaks


【解决方案1】:

问题是来自文本区域的换行符是\n 而不是&lt;br&gt;.. 所以在发送邮件之前将\n替换为&lt;br&gt;..

$body= str_replace("[enter]", "\n",$body);

在“\n”中记住用户双引号...

【讨论】:

  • 其实,我认为情况正好相反……虽然你可能已经回答了我的问题
  • 试试这个...实际上我去年也遇到了同样的问题..所以记得从那时起..
  • 我尝试了$comments = str_replace("[enter]", '\n', $comments);(其中“[enter]”实际上是一个换行符),我得到了line 1\nline2\nline3 - 所以这不太奏效。
  • 老兄将它们转换为
    而不是 \n
  • 这是一封纯文本电子邮件,而不是 HTML。
【解决方案2】:

尝试 nl2br() 函数,如果它最初不起作用,请尝试将消息作为 HTML 电子邮件发送。

【讨论】:

  • nl2nr() 将换行符更改为 html
    ,所以他需要 html 邮件给他们一个在那里的理由..
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 2011-07-31
  • 2013-12-12
  • 1970-01-01
相关资源
最近更新 更多