You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在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("	", "&nbsp;&nbsp;&nbsp;&nbsp;", $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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 21:22:43