【问题标题】:Carriage returns failing on PHP mail sendPHP 邮件发送时回车失败
【发布时间】:2015-10-22 18:30:00
【问题描述】:

我知道这个问题多年来被问过很多版本,但这里或任何地方的答案似乎都没有帮助。

我有来自支持页面上的单个文本区域的票证内容。当从数据库调用并使用 nl2br 回显到页面时,一切都很好。但是,当应用于 PHP 邮件中的消息内容变量时,结果会有所不同。

$to = 'AnEmailAddress';
$message = '
    <html>
    <head>
      <title>Message From The System</title>
    </head>
    <body>
     <table>
        <tr>
            <td>Message: </td><td>'.$ticket_content.'</td>
        </tr>
    </table>
    </body>
    </html>
    '."\r\n";

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: <'.$user_email.'>' . "\r\n";

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

到目前为止,我已经尝试过......

$ticket_content = nl2br($ticket_content);

并将 nl2br 放入表本身..

<td>Message: </td><td>'.nl2br($ticket_content).'</td>

我已经尝试将 preg 和 str 替换为
的 \r\n。但都无济于事,消息输出总是一样的。

你好\r\n\r\n你能检查一下客户端有正确的彩条吗 请问你在他的约会时吗?\r\n\r\nStephen

我也尝试过不使用表格和使用表格,只使用纯文本并删除前两个标题。无论我做什么,它都不会显示换行符。

【问题讨论】:

  • 这些真的是 \r 和 \n 字符,还是只是仰泳,然后是纯文本中的 -r 或 -n?你能打印字符串字节的十六进制值吗?回车和换行应该有不同的值。
  • 您已将您的问题标记为 PhpMailer,但您没有使用它。让您的生活更轻松,立即使用! :)
  • 让这成为关于“不要调用 mail();你会做错”主题的又一课。使用PHPMailer
  • 如果我们看不到代码,就无法说出$ticket_content 有什么问题。

标签: php


【解决方案1】:

简而言之,$ticket_content 包含文字反斜杠+字母组合,而不是实际生活中的提要字符。您没有提供有关如何创建变量的任何提示,但您误读了 manual chapter about strings,更具体地说是 转义字符 部分(强调我的):

如果字符串包含在 双引号 (") 中,PHP 将解释 更多特殊字符的转义序列

【讨论】:

  • 如果是这样的话,当我使用 preg 和 str replace 尝试将它们转换为
    时,它不会将它们更改为文字
    吗?我直接从 POST 创建了变量。 $ticket_content = $_POST['ticket'] ;
  • ^^ 哪个在屏幕上回声很好,所以必须假设它保存换行符并正确返回数据?
  • 如果您输入 l33t 并将 3 替换为 e,您将得到 leet。那是你一开始写leet 的证明吗?
【解决方案2】:

尝试如下使用字符串替换功能-

$ticket_content = str_replace("\r\n", "<br>", $ticket_content);

【讨论】:

  • 这甚至不是有效的 PHP 代码,并且您精确地省略了引号,这很可能是根本问题。还有,这比nl2br()好多少?
  • 我会给这个加 1,因为它是最接近的答案。它仍然不太奏效,但让我想到了使用 $ticket_content = str_replace('\r\n',"
    ",$ticket_content);确实如此,我确定我试过了。
  • @Stephen 无意冒犯,但我发现故意生成无效输出然后编写代码来修复它相当疯狂。
  • @ÁlvaroG.Vicario 我已经更新了我的答案。很抱歉我把它和jquery 混淆了,因为我很着急看到$
  • Right from the manual: 返回在所有换行符之前插入“
    ”或“
    ”的字符串(\r\n、\n\r、\n 和 \r )。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-11
  • 2020-05-20
  • 2014-11-18
  • 2013-10-21
  • 2011-09-27
相关资源
最近更新 更多