【问题标题】:How to send a message in php with paragraphs如何在php中发送带有段落的消息
【发布时间】:2012-07-25 11:24:32
【问题描述】:

我正在使用下面的 php 代码发送消息

<?php
$newline = $_GET['message'];

$newline = str_replace("[N]","\n","$newline");
$newline = str_replace("[n]","\n","$newline");

mail($_GET['to'],$_GET['subject'],$newline,"From: ".$_GET['from']);

header( 'Location: http://my_site.com/POMPC/report.html' ) ;
?>

可悲的是,当我发送消息时,它会出现,但所有内容都出现在一条直线上,将消息弄乱了。

例子:

Hello,
This is a message. 
Reply.

显示为

你好,这是一条消息。回复。

一切都在一条直线上,把东西弄乱了。我如何维护格式。我发送的消息来自我的桌面应用程序,并将用户定义的数据发送给我。

【问题讨论】:

  • $newline = str_replace("[N]","\n","$newline");为什么要在引号中使用 $newline?试试 $newline = str_replace("[N]","\n",$newline);并检查 [N] 是否真的出现在那里。
  • str_replaces 对示例中的输入字符串没有影响。您的桌面应用程序如何将文本发送到 php?尝试var_dump($_GET['message']); 做一点调试。
  • 谢谢大家,现在一切正常。从 32bitfloat 的第一篇文章开始,我已经能够解决它。谢谢大家

标签: php message


【解决方案1】:

$_GET['message']得到的内容中使用&lt;p&gt; &lt;/p&gt;标签;

【讨论】:

    【解决方案2】:

    使用nl2br($_GET['message']);

    另外,你为什么使用 GET 方法? POST 是更好的选择

    【讨论】:

    【解决方案3】:

    您可以像这样创建您的消息

    $content=" <h3> Hello </h3>, <p>This is a message. <br/> Long string <br/>";
    
    $content . = " <br/> Thanks <br/> Your Name";
    

    【讨论】:

      【解决方案4】:

      在所有其他事情之前,请确保您的消息在您期望的位置包含正确的换行符。您可以将此调试代码放在str_replace 调用之后:

      echo "<pre>$newline</pre>";
      

      并查看您的文本是否被分成几行。如果不是,那么问题出在您的输入中。

      接下来,您的邮件阅读器似乎将邮件解析为 HTML,因此所有内容都被拼凑在一起。您没有明确指定内容类型,因此由每个邮件阅读器决定如何解释消息。您的问题有两种解决方案:

      (1) 将消息声明为 HTML 并使用&lt;br/&gt; 拆分行:

      <?php
      $newline = $_GET['message'];
      
      $newline = str_replace("[N]","\n","$newline");
      $newline = str_replace("[n]","\n","$newline");
      $newline = nl2br($newline);
      
      $headers = "Content-type: text/html\r\nFrom: ".$_GET['from'];
      mail($_GET['to'],$_GET['subject'],$newline,$headers);
      
      header( 'Location: http://my_site.com/POMPC/report.html' ) ;
      ?>
      

      (2) 将消息声明为纯文本并将换行符保留为\n

      <?php
      $newline = $_GET['message'];
      
      $newline = str_replace("[N]","\n","$newline");
      $newline = str_replace("[n]","\n","$newline");
      
      $headers = "Content-type: text/html\r\nFrom: ".$_GET['from'];
      mail($_GET['to'],$_GET['subject'],$newline,$headers);
      
      header( 'Location: http://my_site.com/POMPC/report.html' ) ;
      ?>
      

      两者中的任何一个都应该产生您想要的结果。

      【讨论】:

        【解决方案5】:

        如果你想要 HTML 段落:

        仅使用 mail() 函数,您必须像这样编写 HTML 源代码:

        不要在第三个参数$message 中写任何内容,只需将其留空''。并像这样组成休息:

        $additional_headers = <<<MAIL
        Content-Type: multipart/alternative; boundary=00151747835895c6f804c48dc14b
        
        --00151747835895c6f804c48dc14b
        Content-Type: text/plain; charset=UTF-8
        Content-Transfer-Encoding: quoted-printable
        
            Pararaph 1
            Pararaph 2
        
        --00151747835895c6f804c48dc14b
        Content-Type: text/html; charset=UTF-8
        Content-Transfer-Encoding: quoted-printable
        
            <p>Pararaph 1</p>
            <p>Pararaph 2</p>
        
        --00151747835895c6f804c48dc14b--
        MAIL;
        
        $additional_headers = str_replace("\n", "\r\n", $additional_headers);
        

        确保 plain/text 区域中的文本由一个或多个 \r\n 分隔,以获得类似于 html 段落的视觉感觉。

        【讨论】:

          猜你喜欢
          • 2022-08-04
          • 2019-08-12
          • 2014-11-25
          • 1970-01-01
          • 1970-01-01
          • 2013-12-23
          • 2016-07-09
          • 1970-01-01
          • 2014-04-30
          相关资源
          最近更新 更多