【问题标题】:Replacing newlines doesnt work更换换行符不起作用
【发布时间】:2014-09-12 02:33:34
【问题描述】:

因为我的电子邮件表单,我真的很生气。我有一个表单,访客可以在其中提交他们的问题。提交后的消息等会先存入数据库。存储成功后,将向我的电子邮件地址发送一封电子邮件。

一切顺利,除了消息部分。它一直显示 \r\n (这些换行符也存储在 db 中),而我试图 str_replaced() 用
甚至 ntblr() 它的 \r\n 。没有任何效果。我到底做错了什么?

获取消息内容:

$message = safe($mysqli,$_POST['message']);

safe()函数是:mysqli_real_escape_string

电子邮件代码:

if (!$stmt) {
        echo "sendingEmailError";   
    } else {

        //Send email
        $to = "<my@email.com>";         
        $subject = "Website message from ".$account."";
        $body = " 

        <div> ".nl2br($message)." </div>";

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

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

        echo "sendingEmailSuccess"; 

    }

\r\n 应替换为 &lt;br /&gt;

【问题讨论】:

  • 您是否确定您的文本包含换行符和回车符,或者这些字符是否以某种方式被破坏并且现在是\n\、和 r 文字,例如\r\n 作为回车/换行符是 2 个字节,\r\n 作为文字字符反斜杠,rn 是 4 个字节。在任何情况下,您都不应该构建自己的 mime 电子邮件。使用 PHPMailer 或 Swiftmailer,这两者都可以让发送 html 电子邮件变得轻而易举。
  • 您可以使用 PHP_EOL 代替 \r\n
  • PHP_EOL 在这种情况下是错误的,因为它可能是特定于操作系统的,而 \r\n 在这里具有特殊的操作系统无关含义。
  • 除了@MarcB 所说的,做一个var_dump($body) 并发布结果。
  • @user986959:毫无意义。 PHP_EOL 是本地机器的 eol 字符。如果服务器是 Unix 机器,那么 PHP_EOL 是 \n,并且不会匹配 Windows 机器提交的 \r\n

标签: php forms email html-email


【解决方案1】:

你的 mysqli_real_escape_string 改变了你的换行符,通常是通过转义它们。之后你的 nl2br 将不再击中任何东西。

尝试使用原始消息并对其应用 nl2br。

【讨论】:

  • 我觉得自己像个白痴。你是绝对正确的。现在作为一个魅力工作:')
【解决方案2】:

你尝试过正则表达式吗?

$message = preg_replace("/(\\n|\\r)+/ui", '<br />', $message);

另外,检查 mysql 表中的数据,并将其转义为 stripslashes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2012-04-30
    • 2011-06-15
    • 1970-01-01
    相关资源
    最近更新 更多