为何在wp_mail()中需替换 制表符与 换行符?
wp_mail() 为何需要手动处理换行与制表符?
我现在遇到一个问题:使用wp_mail()发送邮件时,必须手动做一系列字符串替换才能让内容正常显示,但我觉得这是没必要的操作,想知道如今wp_mail()是否真的需要这么做?
当前使用的处理代码
$headers[] = 'Content-Type: text/plain; charset=\"utf-8\"\r\n'; $message = str_replace("\\t", " ", $message); $message = str_replace("\\n", "<br />", $message); $message = str_replace(" ", "<br />", $message); $message = str_replace(" ", " ", $message); wp_mail( $send_to, $subject, $message, $headers, $attachments );
问题现象
目前必须执行这些替换,邮件内容才能正常显示。如果不处理,邮件里会原样显示\n和\t符号,示例如下:
纯文本邮件显示效果
Content-Type: text/plain; charset="utf-8" Admin Notice:\n This thing happened, [link]
HTML格式邮件显示效果
Content-Type: text/html; charset=us-ascii <p>Admin Notice:\n<br /> This thing happened, [link]</p>
邮件内容存储在主题选项的textarea中,默认值包含\t\t,但保存后会变成\\t\\t,所以我用了四次str_replace来处理。
虽然替换能解决问题,但我总觉得哪里不对,或者有没有没发现的潜在问题。如果这确实是wp_mail()的常规操作,希望能得到确认。
尝试过的无效解决方法
以下方法我都试过,但均不起作用:
$message = str_replace("\\t", "\t", $message); // 无效 $message = rawurldecode($message); // 无效 $message = htmlentities($message); // 无效 $message = nl2br($message); // 无效 $message = stripcslashes($message); // 无效 $message = htmlspec($message); // 无效 $message = wordwrap($message); // 不是想要的效果
奇怪的对比点
有趣的是,在header里加入\r\n是有效的:
$headers[] = 'Content-Type: text/plain; charset=\"utf-8\"\r\n';
但同样的写法在wp_mail()的$message参数里却完全不起作用,这让我很困惑。
内容的提问来源于stack exchange,提问作者Christian Žagarskas
相关产品推荐
相关产品推荐

