【问题标题】:Textarea to plain text mail, problem with line breaksTextarea到纯文本邮件,换行问题
【发布时间】:2019-11-04 14:30:02
【问题描述】:

在订购表格中,我提供了一些选项来添加一些备注。到目前为止,相关人员使用电子邮件进行订购,实际上他们在实际订单旁边添加了很多备注。 表单有一个文本区域。当我进入

 Dit is een oefening.
Komt de mail
a) wel aan
b) geeft hij de juiste weergave? 
        

在 PHP 中贴出的 textarea 显示为:

Dit is een oefening.\r\nKomt de mail\r\na) wel aan\r\nb) geeft hij de juiste weergave?

到目前为止一切顺利,我想。 但是在邮件中,文本并没有按预期中断,而是完全复制为该字符串

Dit is een oefening。\r\nKomt de mail\r\na) wel aan\r\nb) geeft hij de juiste weergave?

有什么方法(最好是简单的方法)我可以格式化这样的文本字符串以按预期执行吗?

字符串($xtravraag) 包含在一行中 if ($xtravraag != '') {$emailvraagk = "\r\n MAILBERICHT BIJ BESTELLING \r\n\r\n $xtravraag";} else {$emailvraagk = '';}

我已经尝试过这个,结果完全搞砸了: if ($xtravraag != '') {$emailvraagk = "\r\n".' MAILBERICHT BIJ BESTELLING'."\r\n\r\n".$xtravraag;} else {$emailvraagk = '';}

导致

\r\n MAILBERICHT BIJ BESTELLING \r\n\r\n $xtravraag

而且该标题最初运行良好。

邮件标题包括:

        'Mime-Version: 1.0' . "\r\n" .
        'Content-Type: text/plain; charset=UTF-8' . "\r\n" .         
        'Content-Transfer-Encoding: quoted-printable' . "\r\n" .
        'X-Mailer: PHP/' . phpversion()

删除传输编码是没有选择的。经常使用的变音符号需要它。这需要 UTF-8。

根据要求提供页面内的代码

 <fieldset><legend>Overige vragen of opmerkingen die geen bestelling zijn</legend>
  <textarea name='xtravraag' id='xtravraag' cols='76' rows='5'> </textarea>
  </fieldset>

然后发布

if (isset($_POST['xtravraag'])) {$xtravraag = $mysqli->real_escape_string(trim($_POST['xtravraag']));} else{$xtravraag='';}
echo  "extravraag: $xtravraag <br>";        //MOET WEG BIJ OPLEVERING 

其中包括显示整行的回声

解决了

real_escape_string 在这里犯了错误。

【问题讨论】:

  • 在将消息添加到邮件函数中使用的变量时,您是使用双引号" 还是单引号'
  • 我原来用的是双引号。感谢您的提示,我立即尝试。更改为单引号 las 不起作用;拆分它就像它如何完美地适用于表格的线条一样让它变得更糟。改编了这些例子。
  • 您能否包含用于读取文本区域和发送电子邮件的完整代码?
  • 不要使用real_escape_string。请改用准备好的语句。这可能是您当前问题的原因。
  • 我同意 real_escape_string 看起来是这里的罪魁祸首

标签: php email textarea line-breaks


【解决方案1】:

有时mail() 函数无法正确呈现"\r\n" 换行符,您可以尝试将其设为多行,如下所示:

if ($xtravraag != '') {$emailvraagk = "
 MAILBERICHT BIJ BESTELLING 

 $xtravraag";} else {$emailvraagk = '';}

或者使用PHP_EOL开启跨平台支持:

if ($xtravraag != '') {$emailvraagk = PHP_EOL." MAILBERICHT BIJ BESTELLING ".PHP_EOL.PHP_EOL." $xtravraag";} else {$emailvraagk = '';}

【讨论】:

  • 我怀疑这里是否是这种情况,到目前为止一切正常,只是字符串 $xtravraag 中的换行符出现故障。
【解决方案2】:

尝试使用 php nl2br() 函数格式化您的 textarea 内容。

【讨论】:

  • 这会将&lt;br /&gt;标签嵌入到电子邮件中,因为它是纯文本:Content-Type: text/plain; charset=UTF-8
  • 哦,对不起,我的错!
猜你喜欢
  • 1970-01-01
  • 2018-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-08-09
  • 1970-01-01
  • 1970-01-01
  • 2017-06-19
相关资源
最近更新 更多